본문 바로가기

Dev.BackEnd/JAVA

#객체지향적 설계 원칙 - 이론을 통해 알아보는 객체지향


#객체지향적 설계 원칙
SOLID *
SRP (Single Responsibility Principle) : 단일 책임 원칙
OCP (Open-Closed Principle) : 개방-폐쇄 원칙
LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
DIP (Dependency Inversion Principle) : 의존 역전 원칙

단일 책임 원칙
클래스는 단 한 개의 책임을 가져야 한다.
클래스를 변경하는 이유는 단 한개이어야 한다.
단일 책임 원칙을 지키지 않았을 때,
한 책임의 구현 변경에 의해 다른 책임과 관련된 코드가 변경될 가능성이 높다.

개방-폐쇄 원칙
확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
기능을 변경하거나 확장할 수 있으면서
그 기능을 사용하는 코드는 수정하지 않는다.
개방 폐쇄 원칙이 지켜지지 않을 때의 현상으로는
instanceof와 같은 타읍 확인 연산자를 사용하거나 다운 캐스팅이 일어난다.

리스코프 치환 원칙
상위 타입의 객체를 하위 타입의 객체로 치환해도
상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
상속 관계로 묶일 수 없는 클래스들을 상속 관계로 설정했을 때
이 원칙에 어긋나게 된다.

인터페이스 분리 원칙
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
각 클라이언트가 필요로 하는 인터페이스들을 분리함으로써,
각 클라이언트가 사용하지 않는 인터페이스에 변경이 발생하더라도
영향을 받지 않도록 만들어야 한다.

의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.
즉, 저수준 모듈이 변경되더라도 고수준 모듈은 변경할 필요없는 것이다.



Dependency Injection
생성자를 통해서 사용할 객체를 전달받도록 하는 것을 의존성 주입이라고 한다.
또는 설정 메소드 방식을 사용할 수 있다.
즉, setter 메소드를 통해 값을 설정하고,
getter 메소드를 통해 값을 추출하는 방식 또한
의존성 주입이라고 할 수 있다.
설정 메소드 방식은 객체를 생성한 뒤에 의존 객체를 주입하게되므로,
의존 객체를 설정하지 못한 상태에서 객체를 사용할 경우가 생길 수도 있다.
이 때, NullPointException이 발생할 수 있는 것이다.

객체를 제공하는 책임을 갖는 객체를 서비스 로케이터(Service Locator)라고 부른다.
객체를 생성하는 추상 메서드를 클래스 영역에서 제공하는 상위 타입을 구현하는 방법
또는 상위 타입을 상속받은 하위 타입에서 사용할 객체를 설정하여 객체를 구현하는 방법을 말한다.



포스팅 내용은 개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴이라는 책의 내용을 기반으로 작성했습니다.
문제가 될 시 삭제하겠습니다!
-..-