728x90

SOLID, S가 무엇의 약자이고 무엇을 의미하나요?

What are the benefits of OCP?
What are the mechanisms for implementing OCP?

1. SRP : 단일 책임의 원칙 : 단일 책임 원칙. 클래스는 단 하나의 기능만을 갖고, 하나의 기능을 여러 component에 나누어 놓지마라.
SRP Single responsibility principle,

2. OCP : 개방 폐쇄 원칙 OCP : 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙, Open Closed Principle
자동차 운전을 할 수 있다. 소나타, 그랜저, BMW...
즉, 자동차가 바뀌더라도 내가 운전하는 방식은 동일해야 한다.

3. LSP : 서브타입은 대체할 수 있어야한다 베이스 타입을, Liskov substitution principle
어떠한 서브타입으로 바꾸어도라도 프로그램 동작에 문제가 없어야한다
상속 : 큐는 리스트를 상속하지 말고 List를 가져다가 쓰는 방식으로 해야 그 각각의 특징을 살릴 수 있다, 상속이 항상 좋은건 아니라는것, 개체들간의 합성이라는 것
상속을 했을 때 부모의 함수를 썼지만 예상되는 결과를 받아오지 못하는 현상
&
너비와 높이의 조회(getter) 및 할당(setter) 메서드를 가진 직사각형 클래스로부터 정사각형 클래스를 파생하는 경우를 들 수 있다. 정사각형 클래스는 항상 너비와 높이가 같다고 간주할 수 있다. 정사각형 객체가 직사각형을 다루는 문맥에서 사용되는 경우, 정사각형의 크기는 독립적으로 변경할 수 없기 때문에 (혹은 그래서는 안되기 때문에) 예기치 못한 행동을 하게 된다. 

4. ISP 인터페이스 분리 Interface Segregation Principle
클라이언트가 자신이 이용하지 않는 메서드에 의존하면 안된다는 원칙
인터페이스를 더 잘게 나누어 사용하자
 복합기에 print(), copy(), fax() 메소드가 있다. 프린터는 print()를, 복사기는 copy()를, 팩스는 fax()를 사용한다. 세 가지 메소드는 같은 파일에 존재하므로, 프린터의 print()로직만 바뀌어도 복사기와 팩스도 재컴파일을 해야 한다.
클라이언트는 자신이 사용하는 메소드를 가지는 인터페이스만 구현하도록 한다. 인터페이스를 분리하면 프린터의 print() 로직이 바뀌어도 복사기와 팩스는 영향을 받지 않는다.

5. DIP 디펜던시 역전 원칙 Dependency Inversion Principle
상위 모듈은 하위 모듈의 구현에 의존해서는 안 된다. 하위의 모듈이 상위 모듈에 정의한 추상 타입에 의존해야 한다. DIP는 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하기 보다는, 변화하기 어려운것, 거의 변화가 없는 것에 의존하라는 원칙입니다.
카드 결제(상위 모듈은)는 신한 카드 결제(하위 모듈)에 의존해서는 안된다. 신한 카드 결제(하위 모듈)은 카드 결제(상위 모듈)에 정의한 카드 결제 인터페이스(추상 타입)에 의존해야 한다.

What are the benefits of applying SOLID?

SW design을 더 이해하기 쉽고, 유연하고 유지보수하기 수월하게 함

 

Refinement 무엇인가요?

높은 수준의 Design으로부터 낮은 수준 Design으로 세밀화

 

Give examples of applying Separation of Concerns? 

SoC, SoC는 긴 복잡한 함수를 쓰지 말라고 이야기하는 것입니다. 함수의 크기가 커지기 시작하면 함수가 너무 많은 작업을 처리한 다는 것이고, 이는 함수를 분리 해야하는 신호입니다. 다른 섹션의 세부사항을 알지 않고도 개발된 코드를 재사용할 수 있게 함.

 

SRP 와 SoC의 차이점.

SRP는 각 모듈에 대한거고. Soc 는 절차에 관한 것으로 더 큰 범위다. SRP를 만족한다고 soc가 만족되는것은 아니다

 

Modularity 무엇인가?

상호 연결은 간단하고 작아야 합니다.
SoC를 잘 구현하면 Modularity가 좋아짐
OOP의 장점이기도 함, 
클래스의 소스 코드는 다른 클래스의 소스 코드와 독립적으로 작성 및 유지 관리할 수 있고, 일단 만들어진 객체는 시스템 내부에서 쉽게 전달됨

 

Information Hiding 장단점은 무엇인가?

내부 디자인 결정사항을 외부로부터 숨김, Encapsulation

pros : 
캡슐화의 장점은 객체의 세부내용이 외부에 은폐(정보은닉)되어, 변경이 발생할 때 오류발생이 적으며  재사용이 용이하다.
다시말해 객체들 간의 메시지를 주고 받을 때 각 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 간결해지고, 객체간의 결합도가 낮아진다

cons : 
절차지향언어는 컴퓨터 처리구조와 비슷해서 빠르지만, 객체지향 언어는 상대적으로 실행속도가 느림., 클래스, 객체, 상속 등 구조 설계도 해야해서 절차지향언어에 비해 설계시간이 많이 듬

 

Divide and Conquer 무엇인가?

문제를 재귀적으로 해결한다, 더 작은 하위 문제로.

 

디자인 패턴을 설계할때 꼭 써야 하는가?

확장성을 예상가능하다.(OCP)
오랫동안 산업에서 많이 사용된 패턴이라 이미 검증되고 테스트된 구조이기때문에 설계 과정의 속도를 높일 수 있다.
같은 이유로 커뮤니케이션에 수월하다.
재사용 가능하다. 변경 용이성, 재사용성, 유지보수 용이성

728x90

+ Recent posts