티스토리 뷰
포비의 수업인 엘레강트 뽀개기 수업을 듣고 재정리한 내용입니다 :)
수업내용
객체를 존중하라(방법: 원시값과 문자열을 포장한다.)
인자의 값으로 null을 허용하지 않는다. 객체가 null인지 체크하지 않고, 객체가 존재함은 객체의 존재여부를 스스로 결정했을 것이라고 믿는다.
상속
클래스는 final이거나 abstract이다. 상속을 위해 설계한 클래스를 제외하고는 클래스 상속을 막아 상속으로 생길 수 있는 문제를 줄인다.
클래스 이름 짓기
클래스는 객체의 factory이다. 객체의 라이프 사이클을 관리하는 능동적 관리자이다. 즉, 객체의 storage, warehouse 이다.
-er로 끝나는 이름을 사용하지 않는다. 클래스는 객체를 분류하는 개념이라고 생각한다. 그래서 각 고유한 객체가 무엇인지에(what he is) 기반하여 이름을 짓는다. 각 고유한 객체는 자신이 무엇인지에 따라 무엇을 할지 결정한다. 객체는 캡슐화 된 데이터의 대표자로 역할한다. 대표자는 자신이 어떤 행동을 할지 스스로 결정하고 행동한다.
메소드 이름 짓기
메소드 이름은 항상 동사형으로 짓는다고 생각했다. 하지만, 이 책의 내용에 따르면 무언가를 만들어 반환하는 메소드는 명사형, 수정하는 조정자 메소드는 동사로 짓기를 주장하고 있다.
- 빌더(builder) : 명사로 짓는다. 항상 무언가 새로운 객체를 반환한다. 반환타입은 void가 될 수 없다.
- 조정자(manipulator) : 동사로 짓는다. 수정하는 메소드로 반환타입은 항상 void이다.
이때, boolean 값을 리턴하는 경우 빌더에 속하지만 가독성 측면에서 형용사
로 이름 짓기를 주장한다.
생성자
- 적은 메소드와 많은 생성자
클래스를 잘 설계한다면 2~3개의 메소드와 5~10개의 생성자를 포함하는 것이 적당하다. 메서드가 많아지는 것은 단일책임 원칙을 위반할 가능성을 높인다. 생성자가 많아지는 것은 해당 클래스의 활용성을 높여준다. 사용자입장에서 더 편리하게 사용할 수 있게 만들어준다. - 하나의 주 생성자
주 생성자는 속성을 초기화하는 일을 한다. 부 생성자는 this()의 키워드로 체이닝을 하여 주 생성자를 호출하도록 한다. 이것은 중복코드를 방지하며 설계를 간결하게 만들어준다. - 생성자에 코드를 넣지 말라
생성자의 인자에 손대지 말라고 한다. 형변환이나 문자를 자르는 작업등 가공하는 작업은 실제 사용될 시점까지 미루라고 한다.
첫번째는 객체를 인스턴스화하는 것이다.
두번째는 객체가 우리를 위해 작업을 하게 하는 것이다.
이 두가지 역할을 한 번에 시키지 않는다. 생성자에서는 첫번째 역할만 진행한다. 사용할 시점에 두번째로 우리를 위해 가공하는 작업을 시킨다. 이렇게 하면 성능적 개선이 이루어진다고 한다. 또한, 객체는 계약관계로 진행하게 만든다. (이렇게 하면 생성자부분에서는 new 안의 new 안의 new 이런 구조가 만들어진다. 😅)
문서 대신 테스트를 만들어라
단위 테스트는 클래스의 일부이다. 클래스와 단위테스트는 별개로 존재하지 않는다. 프로덕션 코드만큼 단위 테스트에도 관심을 가져야 한다.
정리
수업의 핵심은 객체를 얼마나 존중하는가? 라는 생각이 들었다. 객체지향은 현실세계를 반영하여 사람이 이해하기 좋은 프로그래밍을 하기 위한 것이라고 들었다. 현실과 1:1 매칭이 될 수 없고, 현실의 역할에 따라 객체를 구분할 수 없다. 하지만, 객체를 만들 때 현실세계에 투영해서 생각해보는 것은 중요하다고 생각한다. 현실에서 ㅁㅁ이라고 하면 ㅁㅁ에 맞는 역할을 하기를 기대한다. 객체도 이처럼 어떤 역할을 하길 기대해야한다고 생각한다.
수업시간에 해당 주제로 여러 얘기들이 오갔다. 엘레강트 오브젝트라는 책은 주니어 개발자가 읽기엔 다소 추천하지 않으며 일반적으로 통용되는 것들와 다소 대치되는 내용이 많다고 한다. 또한, 100% 맞다고 하기 어려운 부분이 많이 나온다고 한다. 하지만, 객체를 바라보는 새로운 시각을 주는 책이라고 한다. 이 책에서 주장하는 것과 다른 예외 상황이 생긴다면 해당 내용의 적용을 미루는 것도 좋은 방법이라고 생각한다.😀
'우아한테크코스 > 레벨1' 카테고리의 다른 글
[수업] OOP - 의존성 주입, 클린코드 팁 (0) | 2021.03.24 |
---|---|
[수업] 상태패턴(State Pattern), 파사드 패턴(Facade Pattern) (0) | 2021.03.21 |
객체지향 SOLID 원칙 (0) | 2021.03.09 |
상속, 조합, 인터페이스 (0) | 2021.03.06 |
[수업] 상속과 조합, 좋은 객체의 7가지 덕목, 시그니처, final (0) | 2021.03.05 |
- Total
- Today
- Yesterday
- 모의면접준비
- JS
- TCP/IP
- 알고리즘
- javascript
- 카카오
- React
- 인증
- 코드스쿼드
- 개발공부일지
- OS
- 회고
- CS
- TIL
- JPA
- 글쓰기미션
- 우테코수업
- 월간회고
- Transaction
- java
- python
- 우아한테크코스
- 운영체제
- 학습로그
- 객체지향
- Spring
- DB
- 네트워크
- 마스터즈코스
- 내부코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |