목록OOP (7)
Arthur's Blog
📌 정의 서로 상호작용하는 시스템들간의 의존성. 의존성은 실질적 의존성과 인위적 의존성으로 나뉠 수 있다. 실직적 의존성 한 시스템이 소비하는 다른 시스템이 기능이나 서비스의 집합. 인위적 의존성 한 시스템이 다른 시스템이 제공하는 기능이나 서비스를 소비하기 위해 필요한 여러 요소들의 집합. 언제나 존재하지만 그 비용은 충분히 감소될 수 있으며 Loose Coupling은 인위적 의존성을 최소한으로 줄이는 구조를 의미한다. 언어적 의존성 플랫폼 의존성 API 의존성 🔗 긴밀한 결합(Tight Coupling) 강하게 결합된 객체(Tightly Coupled Object Object)는 다른 오브젝트에 대한 상당히 많은 정보를 필요로 하고, 보통 두 객체간의 인터페이스들에게 서로 높은 의존성을 가지고 있다..
📌 정의 의존성 주입이라고 말하며, 추상화를 해치지 않고 의존성을 인수로 넘겨주는 것을 말한다. 😎 예시 Spring Boot를 예시로 들자면, Service 구현체에서는 Repository와 같이 의존성을 갖는다. 하지만 해당 Service를 추상화 한 interface는 Repository가 인수로 넘어가는 정보를 전혀 담고있지 않다. interface UserService { void removeUser(Long userId); } @Service @RequiredArgsConstructor class UserServiceImpl implements UserService { private final UserRepository userRepository; } 위 코드는 위의 말에 따라서 UserSer..
🎊 시작하기 전에.. DI, IoC, DIP가 비슷비슷한건줄 알고, 어떤 부분이 다른지 몰랐다면 잘 찾아온것이라고 생각한다. 이 글에서는 각 각의 정의, 내용보다는 차이점을 중점적으로 다룰 것이다. 😵 DI, IoC 스프링을 공부하는 사람이라면 DI과 IoC가 거의 동등한 것이라고 생각할 수도 있다. 왜냐하면 스프링 3대 요소를 이야기할 때 IoC/DI라고 많이 이야기 하기 때문이다. 하지만 DI는 IoC를 구현하는 방법 중 하나이다. 하지만 역으로 IoC 컨테이너를 사용하지 않는 DI또한 가능하다. 이를 Pure DI라고 부른다. 참고 위에서 IoC를 사용하지 않는 DI 라는 표현을 했는데, 이 표현은 무리가 있을 수 있다고 생각된다. 왜냐하면 모든 DI 구현체는 IoC로 간주될 수 있기 때문이다. 자..
📌 정의 애플리케이션에 필요할 수 있는 모든 서비스를 얻는 방법을 알고있는 객체를 갖는 것이다. IoC를 구현하는 DI 외 방법 중 하나. 🔗 종속성 다이어그램 실제 사용방법 class ServiceLocator{ private static ServiceLocator sInstance; public static void load(ServiceLocator arg) { sInstance = arg; } private Map services = new HashMap(); public static Object getService(String key){ return sInstance.services.get(key); } public void loadService (String key, Object service..
📌 정의 1️⃣ 높은 응집도 응집도가 높다는 것은 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다는 것이다. 간단하게, 기능을 변경할 때 여러 모듈에서 변경하는 것이아닌 하나의 모듈만 변경하면 되는 것이다. 2️⃣ 낮은 결합도 책임과 관심사가 다른 오브젝트 또는 모듈과는 낮은 결합도, 즉 느슨하게 연결된 형태를 유지하는 것이 바람직한 것. 결합도가 낮아지면 확장에도 용이해진다.
📌 정의 SRP(Single Responsiblity Principle) 단일 책임 원칙 소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임만을 가져야 한다. 책임은 기능으로 해석하면 된다. OCP(Open-Closed Pinciple) 개방-폐쇄 원칙 기존의 코드를 변경하지 않고(Closed), 기능을 수정하거나 추가할 수 있도록(Open) 설계해야 한다. 변경되는 것이 무엇인지 초점을 맞춘다. 즉, 자주 변경되는 내용은 수정하기 쉽게 설계하고, 자주 변경되지 않는 것은 수정되는 내용에 영향을 받지 않는 것.이를 위해 인터페이스를 자주 사용한다. LSP(Liskov Substitution Principle) 리스코프 치환 원칙 자식클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다. ..