감자튀김 공장🍟

[객체 지향 설계] day 7 본문

JAVA

[객체 지향 설계] day 7

Potato potage 2023. 8. 7. 23:24
반응형

<< 스프링 입문을 위한 자바 객체 지향의 원리와 이해 >> 를 읽고 정리합니다.

뒤에 나오는 예시는 책에 적힌 예시입니다.

 

 

1. SRP - 단일 책임 원칙

"어떤 클래스를 변경해야하는 이유는 오직 하나뿐이어야 한다" - 로버트 C.마틴

 

📌 속성이 SRP를 지키지 않은 경우 (ex. 남자만 군대를 간다고 가정)

class 사람 {
	String 군번;
}

....


사람 로미오 = new 사람();
사람 줄리엣 = new 사람();

줄리엣.군번 = "1573042009";

➡ 사람 클래스를 남자 클래스와 여자 클래스로 분할, 남자 클래스에만 군번 속성을 갖게 한다.

 

 

📌 메서드가 단일 책임 원칙을 지키지 않은 경우

class 강아지 {
	final static Boolean 수컷 = true;
    final static Boolean 암컷 = false;
    Boolean 성별;
    
    void 소변보다() {
    	if(this.성별 == 수컷) {
        	// 한쪽 다리를 들고 소변을 본다.
        } else {
        	// 앉은 자세로 소변을 본다.
        }
    }
}

소변보다() 메서드에서 성별에 따라 분기 처리가 진행됨   단일 책임 (행위) 원칙 위배

 

  수정

abstract 강아지 {
	abstract 소변보다();
}

class 수컷강아지 extends 강아지 {
	void 소변보다() {
    	// 한쪽 다리를 들고 소변을 본다.
    }
}

class 암컷강아지 extends 강아지 {
	void 소변보다() {
    	// 앉은 자세로 소변을 본다.
    }
}

 

📌애플리케이션의 경계를 정하고 추상화를 통해 클래스들을 선별하고 속성와 메서드를 설계할 때 반드시 단일 책임 원칙을 고려하는 습관을 들이자.

 

 

 

2. OCP - 개방 폐쇄의 원칙

자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.

 

📌 개방 폐쇄 원칙에 위배

 창문과 기어가 자동으로 바뀌자 운전자의 행동에도 변화가 온다.

 

 

📌  수정

상위 클래스 또는 인터페이스를 중간에 둠으로써 다양한 자동차가 생긴다고 해도 운전자는 영향을 받지 않는다.

다양한 자동차가 생긴다고 하는 것은 자동차 입장에서는 자신의 확장에는 개방돼 있는 것이고, 운전자 입장에서는 주변의 변화에 폐쇄돼 있는 것이다.

 

 

 

3. LSP - 리스코프 치환 원칙

"서브 타입은 언제나 자신의 기반 타임으로 교체할 수 있어야 한다" - 로버트 C. 마틴

 

📌 객체 지향의 상속

  • 하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다.
  • 구현 클래스 is able to 인터페이스 - 구현 분류는 인터페이스할 수 있어야 한다.

해당 문장대로 구현된 프로그램이라면 이미 리스코프 치환 원칙을 잘 지키고 있는 것

 

ex) 아버지 - 딸 (계층도) LSP 위배

동물 - 펭귄 (분류도) LSP 만족

 

"하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는 데 문제가 없어야 한다."

 

 

 

 

4. ISP - 인터페이스 분리 원칙

"클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다." - 로버트 C. 마틴

 

(UML 나중에 업데이트..)

 

 

단일 책임 원칙 (SRP)와 인터페이스 분할 원칙(ISP)은 같은 문제에 대한 두 가지 다른 해결책이라고 볼 수 있다.

  특별한 경우가 아니라면 단일 책임 원칙을 적용하는 것이 더 좋다.

 

 

 

5. DIP - 의존 역전 원칙

"고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다."

"추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다."

"자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"

 

(UML 후에 업데이트)

 

📌 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어 변하기 쉬운 것의 변화에 영향받지 않게 하는 것이 의존 역전 원칙이다.

 

 

반응형

'JAVA' 카테고리의 다른 글

[디자인 패턴] day 9  (0) 2023.08.09
[디자인 패턴] day 8  (0) 2023.08.08
[JAVA 공부] day 6  (0) 2023.08.06
[JAVA 공부] day 5  (0) 2023.08.05
[JAVA 공부] day 4  (0) 2023.08.04
Comments