[Java] SOLID 원칙

누구세요·2024년 9월 4일

개발자라면 무슨일이 있어도 객체지향 설계할때 솔리드 원칙을 절대로 잊으면 안된다는말이 인상깊어서 조금 찾아봤다. SOLID가 솔리드라는 단어인줄알았는데 줄임말이었다.

SOLID 법칙이란

로버트 C. 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어 기억술로 소개한 것 위키백과에 서술되어있는 다섯가지 원칙은 다음과 같다.

문자약어설명
SSRP(Single responsibility principle)단일 책임 원칙
한 클래스는 하나의 책임만 가져야 한다.
OOCP(Open/closed principle)개방-폐쇄 원칙
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
LLSP(Liskov substitution principle)리스코프 치환 법칙
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
IISP(Interface segregation principle)인터페이스 분리 법칙
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
DDIP(Dependency inversion principle)의존관계 역전 법칙
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

머리가 나빠서일까.. 솔직히 뭔소린지 모르겠다. 그래서 나름대로 찾아보고 해석한 뜻을 간략하게 적어봤다. 틀릴 수도 있음..

SRP(Single responsibility principle) 단일 책임 원칙

  • 한 클래스는 하나의 책임만 가져야 한다.
  • 예를 들면 자동차에 핸들이라는 클래스는 경적을 울리고 방향을 바꾸는 핸들의 역할만을 해야지 핸들을 돌렸는데 패달의 역할인 속도를 증가시킨다던가 갑자기 뒷문이 벌컥 열리면 안된다는거다.

OCP(Open/closed principle) 개방-폐쇄 원칙

  • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 가장 간단한 예로는 접근제어자를 사용한 Getter와 Setter을 들 수 있을 것 같다.
private String name;
public String Name 
{
    get { return name;}
    set { name = "[" + value + "]";}
}

LSP(Liskov substitution principle) 리스코프 치환 법칙

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 대표적으로 상속관계에서 부모 클래스로 만들려던 것을 부모클래스를 상속받은 자식 클래스 타입으로 생성해도 호환이 잘 되어서 문제없이 기능을 사용할 수 있어야 된다는 말이다.

ISP(Interface segregation principle) 인터페이스 분리 법칙

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • 말 그대로 인터페이스를 기능별로 잘 구분하라는 뜻인 것 같다.

DIP(Dependency inversion principle)의존관계 역전 법칙

  • 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다. 예를들면
  1. 학생이라는 클래스가 있고 학생의 성적관리를 위해 성적이라는 클래스를 추가
  2. 쉽게 원하는 데이터를 가공하고자 성적 클래스에 이것저것 반정보도 끌어오고 학생정보도 끌어옴
  3. 어느순간 보니 학생 클래스보다 성적 클래스에 학생에 대한 정보를 더 많이 포함하고 있음
  • 학생 클래스에는 학생정보, 성적 클래스에는 성적, 과목 클래스에는 과목에 대한 정보를 지니고 있어야 한다는 말이다.

0개의 댓글