[Java] : SOLID (객체 지향 5대원칙)

dohyoungK·2024년 3월 14일
0

면접 스크립트

목록 보기
16/25
post-thumbnail

[Java] SOLID (객체 지향 5대 원칙)


객체 지향 5대 원칙이란, SRP, OCP, LSP, ISP, DIP 5개를 말하며 코드 확장성과 유지 보수 편의성, 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로서 개발의 생산성을 높이기 위해 사용한다.

SRP 단일 책임 원칙 (Single Responsibility Principle)

클래스는 단 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다는 원칙이다. SRP를 통해 다른 클래스들이 서로 영향을 미치는 연쇄작용을 줄일 수 있으므로 유지보수에 용이하다.

OCP 개방 폐쇄 원칙 (Open Close Principle)

클래스는 확장에 열려있어야 하며, 수정에는 닫혀있어야 한다는 원칙이다. 요구사항의 변경사항이 발생했을 때, 클래스 확장을 통해 손쉽게 구현하면서, 클래스 수정은 최소화 하도록 프로그램을 작성하는 것이다. 추상화와 다형성을 통해 OCP를 지킬 수 있으며, OCP는 관리가 용이하고 재사용 가능한 코드를 만드는 기반이 된다.

LSP 리스코프 치환 원칙 (Liskov Substitution Principle)

서브 타입은 언제나 기반(부모) 타입으로 교체할 수 있어야 한다는 원칙이다. 다형성을 이용하기 위해 상위 클래스 타입으로 객체를 선언해 하위 클래스의 인스턴스를 받으면, 업캐스팅된 상태에서 부모의 메소드를 사용해도 동작이 의도대로 흘러가야 한다는 것을 의미한다.

public void f() {
	// Collection 인터페이스 타입으로 변수 선언
    Collection collection = new LinkedList();
    data = new HashSet(); // 중간에 전혀 다른 자료형 클래스를 할당해도 호환됨
    
    modify(data); // 메소드 실행
}

public void modify(Collection collection){
    collection.add(1); // 인터페이스 구현 구조가 잘 잡혀있기 때문에 add 메소드 동작이 각기 자료형에 맞게 보장됨
    // ...
}

ISP 인터페이스 분리 원칙 (Interface Segregation Principle)

인터페이스를 각각 사용에 맞게 분리해야한다는 원칙이다. SRP가 클래스의 단일 책임이라면 ISP는 인터페이스의 단일 책임을 강조하는 것이다. 인터페이스를 사용하는 클래스 기준으로 분리함으로써, 각 클래스의 목적과 용도에 적합한 인터페이스 만을 제공하는 것이다.

DIP 의존 역전 원칙 (Dependency Inversion Principle)

어떤 클래스를 참조해서 사용하는 상황이 생긴다면, 클래스를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스, 인터페이스)를 참조하라는 원칙이다. 의존 관계를 맺을 때, 자주 변화하는 구현 클래스 보다는 변화가 거의 없는 인터페이스에 의존하라는 원칙이다.

0개의 댓글