객체지향은 객체에 메시지를 보내는 것이다. 그 메시지는 메서드라는 형태로 이루어 진다.
기본에 집착하자. 모든 응용은 탄탄한 기본에서부터 나온다.
- 예외처리가 중요하다.
- 항상 테스트 코드를 작성한다.
- 라이브러리는 알아보고 사용한다.
- 관심사의 분리 고려하기 (높은 응집도와 낮은 결합도를 가지게 설계하기)
- 결합도: 하나가 바뀌면 다른 연관된 것들이 영향받는 정도
- 추상화 수준을 항상 생각하기 (가독성)
- getter사용 대신 객체 내부에 질문을 던져서 해결하는 방식으로 작성한다. (응집도를 높이고 외부에서 함부로 get으로 꺼내가지 않도록 한다.)
- OCP 지키기 (기존 코드의 변경 없이, 시스템의 기능을 확장할 수 있어야 한다.)
- LSP 지키기 (자식 클래스는 부모 클래스의 책임을 준수하며, 부모 클래스의 행동을 변경하지 않아야 한다. 즉, 부모가 준건 건드리지 말고 그대로 자식이 사용하면 된다는 것이다.)
- ISP 지키기 (인터페이스를 잘게 쪼개자, 인터페이스 안에도 사용하는 메서드만 작성한다.)
- DIP 지키기 (고수준, 저수준 모듈이 모두 추상화(인터페이스)를 의존하도록 한다.)
- 의존성의 역방향을 의미한다.
- 구체적인 클래스를 바라보면 자주 바뀔수 있기 때문에 추상화된 인터페이스를 바라보면 스팩만 바라보기 때문에 사용할때(런타임에) 구체적인걸 스프링이 알아서 주입해주면 그냥 가져다 쓰면 된다. (주입되는게 뭔지 모르고 그냥 인터페이스만 사용하면 된다는 말이다.)
- 연차, 직종에 상관없이 모든 개발자들은 나의 선배님들이다. 항상 존경하며 배우도록 하자.