일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네트워크
- 스프링부트와AWS로혼자구현하는웹서비스
- 자료구조
- 자바예외
- CleanCode
- 인프런백기선
- 기술면접
- AWS
- jpa
- MariaDB
- 알고리즘
- 클린코드
- 알고리즘분석
- SQL쿡북
- mysql
- 인프런김영한
- 이팩티브 자바
- 이펙티브자바
- 도메인 주도 개발 시작하기
- DDD
- java
- vue.js
- 자바스터디
- 인덱스
- 혼공SQL
- 자바
- aop
- 이펙티브 자바
- react
- AWS RDS
- Today
- Total
기록이 힘이다.
객체 지향의 사실과 오해 본문
역할, 책임, 협력 관점에서 본 객체지향
선택한 이유
어렴풋이 알고 있는 '객체'에 대한 정확한 이해가 필요했다. 주니어가 읽기에 좋은 책이었다.
내용
'이상한 나라의 앨리스'에 비유하여 객체를 설명하고 있다. 등장인물과 사건을 통한 객체의 설명은 누구나 쉽게 이해할 수 있었다. 객체지향에서 역할, 책임, 협력이란 무엇인지 글을 통해 배울 수 있다. 더불어 객체의 특징을 통해 인생도 비유적으로 생각해 볼 수 있는 내용이었다.
<테스트-주도 개발>
테스트-주도 개발의 기본 흐름은 실패하는 테스트를 작성하고, 테스트를 통과하는 가장 간단한 코드를 작성한 후(이 시간 동안에는 중복이 있어도 무방하다), 리팩터링을 통해 중복을 제거하는 것이다.
테스트-주도 개발은 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것이다.
테스트-주도 개발은 다양한 설계 경험과 패턴에 대한 지식이 없는 사람들의 경우에는 온전한 혜택을 누리기가 어렵다는 것이다.
테스트-주도 개발은 객체지향에 대한 깊이 있는 지식을 요구한다.
테스트-주도 개발은 책임-주도 설계의 기본 개념과 다양한 원칙과 프랙티스, 패턴을 종합적으로 이해하고 좋은 설계에 대한 감각과 경험을 길러야만 적용할 수 있는 설계 기법이다.
<묻지 말고 시켜라>
객체를 자율적으로 만들고 캡슐화를 보장하며 결합도를 낮게 유지시켜 주기 때문에 설계를 유연하게 만든다.
객체가 자신이 수신할 메시지를 결정하게 하지 말고 메시지가 협력에 필요한 객체를 발견하게 해야 한다.
<책임의 자율성이 협력의 품질을 결정한다>
1. 자율적인 책임은 협력을 단순하게 만든다.
2. 자율적인 책임은 모자 장수의 외부와 내부를 명확하게 분리한다.
3. 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않는다.
4. 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.
5. 객체가 수행하는 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워진다.
<개발자의 삶이 고단하면서 흥미로운 이유>
요구사항이 예측 불가능하게 변경되기 때문이다.
훌륭한 설계자는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에 예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공하는 능력을 갖춰야 한다.
안타깝게도 미래의 변경에 대비할 수는 있지만 미래의 변경을 예측할 수는 없다.
특히 마지막에 '커피 전문점'이라는 세상을 통해 도메인을 설계하는 방법은 객체를 이해하고 도메인 모델에서 최종 코드까지 구현 과정을 간략하게 설명하여 이해를 높일 수 있었다. 메시지가 객체를 결정한다는 말의 의미, 책임을 따라 설계가 이뤄지는 과정, 인터페이스와 구현의 분리와 같은 다양한 이슈에 대해 어렴풋하게나마 개념을 잡을 수 있다.
객체지향 세계에서는 모든 객체가 능동적이고 자율적인 존재다.
'IT서적' 카테고리의 다른 글
[면접을 위한 CS 전공지식 노트] 웹 브라우저의 캐시 (0) | 2023.03.07 |
---|---|
[면접을 위한 CS 전공지식 노트] 인덱스 최적화 기법 (0) | 2023.03.06 |
[면접을 위한 CS 전공지식 노트] 포트폴리오와 면접 (0) | 2023.02.28 |
[면접을 위한 CS 전공지식 노트] 객체지향 프로그래밍 설계원칙 (0) | 2023.02.19 |
개발자가 되기 위해 꼭 알아야하는 IT 용어 (0) | 2023.01.26 |