Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- MachineLearning
- deeplearning
- GPT
- 클린코드
- 알렉스넷
- Alexnet
- 자바
- 딥러닝
- 백준 1339 자바
- Java
- 논문리뷰
- 3745
- NLP
- cs231n
- 논문구현
- 백준 1916 자바
- 백준9095
- 짝지어제거하기
- 알고리즘
- 1261
- 디미터법칙
- 논문
- 백준 1339
- 관심사분리
- 1107번
- 1916
- 다익스트라
- dijkstra
- 머신러닝
Archives
- Today
- Total
산 넘어 산 개발일지
Clean Code - 시스템 본문
시스템에서 가장 중요한 것은 유지보수이다.
유지보수에 가장 중요한 것은 영역(도메인)간의 분리이다.
따라서 우리는 코딩을 할 때 각 모듈들이 서로에게 끼치는 영향을 최소화 할 수 있도록 코드를 짜야 하고,
이를 위해서 등장한 여러 기법들을 알 필요가 있다.
주요 내용
-
관심사 분리
- 애플리케이션이나 클래스와 같은 모듈이 하나의 관심사만 가지도록 분리하는 것(SRP와 비슷)
- 이 관심사의 영역을 뚜렷하게 나누면 서로의 영역에 영향을 주지 않으므로 내가 원하는 부분만 수정할 수 있어서
- Main 분리
- 객체나 모듈의 생성과 관련된 코드는 모두 main 혹은 main에서 호출하는 모듈이 담당한다.
- 즉 시스템의 다른 모듈에서는 모든 객체가 이미 생성되었고 의존성이 연결되어 있다고 가정하는 것이다.
- 추상 팩터리 패턴
- 나머지 모듈들이 객체를 생성하는 시점을 정해야 할 때 사용
- Factory 형식의 인터페이스를 main에서 구현해놓는다.
- 이후 다른 모듈에서는 main에서 구현된 팩터리 객체를 통해 객체를 생성한다.
- 이렇게 되면 객체가 생성되는 과정은 모른채 생성 시점만 지정할 수 있다.
- 의존성 주입(Dependency Injection)
- 서비스(객체를) 선언만 하고, 이에 대한 정의는 외부에서 주입한다.
- 클라이언트는 이 서비스의 인터페이스를 통해 사용만 하고, 이 서비스를 제공하는 역할은 외부에서 담당한다.
- 제어 역전(Inversion of Control)
- 제어 역할을 외부에 맡김
- 한 객체에서의 보조 책임을 다른 객체에 넘김으로서 SRP를 지킴
- 횡단 괌심사
- 다른 관심사에 영향을 끼치며 깔끔하게 분리되지 못하는 관심사. 이로 인해 기존의 모듈성이 깨진다
-
AOP(Aspect Oriented Programming)
- "관점"이 모듈을 구성하는 개념
- 자바 프록시
- 객체 생성시 이를 커스텀 클래스로 한번 감싼다.
- 커스텀 클래스에서는 원하는 객체 생성 전후에 필요한 작업을 해줄 수 있다.
- 이 커스텀 클래스는 객체 생성 시 사용자가 원하는 상황에 맞는 객체를 생성해줄 수 있다.
- 즉 사용자는 객체를 상황에 따라 계속 새로운 클래스를 만들 필요 없이 이 커스텀 클래스 하나로 만들 수 있는 것이다.
- POJO(PlainOldJavaObject)
- POJO는 도메인에 맞춰진 순수한 객체이므로, 사용자가 원하는 대로 구현하기 편하고 미래의 구조에 맞춰 유지보수하기도 수월하다.
- DECORATOR 패턴
- 객체간의 결합을 유연하게 지원하는 패턴
- class A에 대해서 class B, class C의 기능을 합치고 싶은 경우 기존에는 class ABC를 새로 생성해야 함
- 그러나 DECORATOR 패턴을 사용하면 classA에 B나 C를 유기적으로 결합할 수 있고, 적절한 조합을 사용자 임의로 할 수 있음
내 코드 돌아보기
느낀점
클린코드에서 지금까지 읽은 내용 중 가장 어려운 부분이었던 것 같다.
내용도 내용이지만, 일단 나에게는 생소한 단어들이 많이 등장했다.
제어역전, 관심사 분리, 영속성 등등...
이런 단어들도 나중에 차근차근 정리해두면 좋을 것 같다.
정리할 용어 : AOP, 자바 프록시, Decorator 패턴
'Study > CleanCode' 카테고리의 다른 글
Clean Code - 창발성 (0) | 2021.03.18 |
---|---|
Clean Code - 클래스 (0) | 2021.03.04 |
Clean Code - 단위 테스트 (0) | 2021.03.03 |
Clean Code - 경계 (0) | 2021.03.01 |
Clean Code - 객체와 자료구조 (0) | 2021.02.21 |
Comments