추상클래스를 사용하는 이유
interface는 추상클래스랑은 다르게 규격, 규약에 가깝다. 준수해야하는 규칙이다. SOLID 에서 I 에 해당하는 ISP 보면 알 수 있듯이 이 Interface는 최소한으로 잡으며, Interface마다 분리해서 설계한다. 여기서 만약 특정 Interface를 준수하여 작성된 하위클래스 3개가 있다고 하자. 이 3개의 클래스들은 어느정도 공통성을 가
interface는 추상클래스랑은 다르게 규격, 규약에 가깝다. 준수해야하는 규칙이다. SOLID 에서 I 에 해당하는 ISP 보면 알 수 있듯이 이 Interface는 최소한으로 잡으며, Interface마다 분리해서 설계한다. 여기서 만약 특정 Interface를 준수하여 작성된 하위클래스 3개가 있다고 하자. 이 3개의 클래스들은 어느정도 공통성을 가
정적 팩토리 메서드 패턴을 활용할 때 나는 일반적으로 도메인 클래스 안에 다가 넣어두었다. 그렇게 하면 코드를 읽을 때 훨씬 심플하기 때문이였다. 1Response.from(Something something) {} Something 으로 부터의 Response 객체 라고 확 읽혀진다. 근데 문제점이 있었으니. 기본적으로 static으로
Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라.장점이름을 가질 수 있다.호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다.반환타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. from : 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드of : 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드valu
디자인패턴 vs 알고리즘알고리즘은 문제 해결을 위한 처리 절차. ex 1) 서울에서 부산으로 가는 방법 걸어서 간다 자전거를 타고 간다. 버스를 타고 간다. KTX를 타고 간다. 비행기를 타고 간다. ex 2) 여러 개의 데이터가 있을 때 순서에 맞게 정렬하는 방법 단순 정렬 버블 정렬 삽입 정렬 쉘 정렬 퀵 정렬 디자인 패턴 효율적인 프로그래밍을
AllArgs 을 위한 builder는 만들지마라 -> 클래스단위로 Builder를 만들지 마라그러면 모든 매개변수를 변경할 수 있는 기회를 가지게 된다. 접근제어가 필요한 매개변수들은 제어를 해주는게 좋다는 의미.이를 해결하기 위해서는 클래스단위로 빌더를 선언하는 거보다는 메소드 별로 빌더를 선언하는 것이 좋다. build() 이후에 callback
When you have a problem associated with jdk in intellij, you can re-set it in Project Structure menu. 1File > Project Structure > Project SDK if it doesn’t work good although you re-set it, then
Aspect 객체에 동적으로 들어오는 데이터를 넘겨야하는 경우가 생길 때가 있다. 보통 이럴 때에 나는 커스텀 어노테이션을 만들고 이 어노테이션 값에 SpEL 문법을 활용하여 동적으로 들어온 데이터를 넘겨주는데 이 방법을 남겨둔다. Aspect 쪽에서 동적 데이터가 필요한 배경로깅 작업이 서버에 단순히 로그를 남겨둘 때에도 있지만 만약 좀 더 중요한 로그라
테스트 코드를 작성하다보면 서로 간에 의존성을 가지고 있어서 테스트를 하기 어려운 상황들을 직면하게 된다. 이를 해결했던 나의 경험들을 남겨두려고 한다. 이 글은 저자의 주관적인 생각이 포함되어 있음으로 맹목적인 신뢰는 지양하기 바란다. 외부 리소스 코드의 분리테스트하려는 코드가 의존성을 가지고 있어서 테스트하기가 어렵다면, 이를 개선하기 위한 첫번째 방법
Java 프로그래밍 책을 맨 처음 펼치고 조금 읽다보면 ‘try-catch’ 키워드를 활용한 예외처리 문법이 소개된다. 프로그래밍을 얼마 접하지 않은 초급 개발자들도 이 ‘try-catch’ 키워드는 낯설지 않을 것이다. 그러나 정작 이 예외처리 문법을 보다 효율적으로 사용하는 할 수 있는 방법에 대해서는 쉽게 익혀지지 않는 것 같다. Java 프로그래밍