Search
Duplicate
🕰️

우아한 객체지향

세미나 목표

OOP의 구성요소는 역할, 책임, 협력, 하지만 OOP만으로 설계를 하면 객체 탐색 그래프의 사이즈가 비대해진다, 여기에 비즈니스 정책이 더해지면서 서비스 특성에 따라 TPS가 다르고 문제가 발생할 수 있다.
좋은 설계를 위해선 무언가가 더 필요하다.
의존성을 이용해 설계를 한 단계 더 진화시키는 방법에 대해 알아보자.

의존성이란?

B가 변경될 때, A도 함께 변경될 가능성이 있다면 의존성을 가지고 있다고 함
설계를 잘하면 B가 변경되더라도 A가 변경되지 않을 수 있음
클래스 의존성의 종류
패키지 의존성
양방향 의존성을 피하라, 단방향!
동적인 프로세스를 정적인 코드에 담아내는 사람이 개발자, 즉 양방향 의존성은 개발은 편해도 런타임 시점에 예상치 못한 문제들이 발생할 수 있다.
객체 간의 데이터 Sync 이슈, 객체의 수명 주기가 달라 참조해야할 때 NPE이 발생할 수도 있음, 성능 이슈
다중성이 적은 방향을 선택하라
작가와 책이 있다면
작가 → 책이 아닌
작가 ← 책으로 해라
물론 무조건 사용하지 말라는 것이 아니라, 사용하더라도 알고 사용하자, 최대한 발생 가능성과 범위를 최소화시켜랴

패키지 사이의 의존성 사이클

패키지 간의 의존성 사이클이 생긴다는 것은 사실 두 패키지가 같은 이유로 같이 바뀐다는 의미
즉 사실은 하나의 패키지를 쓸데없이 분리한 것, 다시 합쳐주자

의존성을 이용하여 설계 진화시키기

협력 설계하기
관계의 방향은 협력의 방향, 런타임에 객체들의 협력 관계를 그려보고 방향성을 잡는 것이 중요하다.
물론 처음부터 완벽한 설계를 하는 것은 어렵다.
설계를 진화시키기 위한 출발점은 협력을 설계하는 것
의존성이 어떻게 흐를지 봐라, 봐도 모르겠다면 일단 코드를 작성하라.
코드 작성 후 의존성을 다시 그려보고 의존성 관점에서 설계를 다시 검토하라.
연관관계 : 협력을 위해 필요한 영구적인 탐색 구조
의존관계 : 협력을 위해 일시적으로 필요한 의존성