- 전략패턴/의존성 주입의 사용 시 유의점
아무거나 분리해서 주입받으려고 해서는 안된다.
공통적인 것/변하지 않는 것은 두고 변경될 것에 대한 부분만 분리해야 한다. 변경의 여지가 거의 없는 부분에 괜히 썻다가 오히려 명료성이 떨어질 수 있다.
- Null pointer Error유의하기
NPE의 위험을 생각하며 프로그래밍해야겠다.
고려해볼 방식들: EmptyPiece 같은 비어있다는 의미의 클래스 정의,
값이 이미 있는 객체를 기준으로 검사하기, Optional의 사용
명시적 NULL검사 등
- Dto
계층 간 데이터의 전달이 필요할 때, Dto를 사용하면 정보가 직접적으로
노출되는 것을 막을 수 있다.
- VO
값을 나타내는 클래스를 두어 값을 도메인적인 단위로 사용하며, 불변성을
부여할 수 있다.
- equals(동일성과 동등성)
반사성,대칭성,추이성,일관성,null검사... equals는 생각보다
섬세하게 다뤄야 하는 메서드이다. hashCode도 같이 정의하자.
- 커맨드 패턴
동작에 대한 추상화/캡슐화를 할 수 있다.
- 상태 패턴
객체의 상태를 추상화해서 상태에 따라 달리 행동하는 구현이 가능하다.
- 정적 팩토리 메서드
기본 생성자를 막아 인스턴스에 대한 관리 가능, 메서드명 부여 가능
다형성을 이용해서 인자에 따라 다른 하위객체 반환 가능
- 일급 컬렉션
컬렉션만을 가지게 포장하면 상태에 대한 검증을 넘겨 클라이언트는 로직에 더 집중가능하다. 어울리는 동작에 대한 책임도 넘길 수 있다.
- 가변 vs 불변
불변의 장점: 멀티쓰레드 안전, 실패 원자성 제공, 안정적인 공유 가능
하다는 장점이 있다.
불변의 단점: 새로운 객체를 만들때의 비용, 값이 조금만 바뀌어도 아예 새 객체를 만들어야 함.
- 객체지향 solid원칙
단일책임, OCP, 리스코프 치환 원칙, 인터페이스 분리 ,의존성 역전