DI : Dependency Injection ( 의존성 주입 )What is DI ?ReferencesWhat is DI ?의존성 주입을 이해하기 위해 의존성의 개념부터 짚고 가겠다.Dependency ( 의존성 ) ?SOLID 에서 Dependency Inversion Principle ( DIP, 의존 관계 역전 원칙 ) 을 이해하고 있다면 의존성을 이해하기 쉽다. DIP 에 대해서는 추후 포스팅 할 예정이다.DIP 는 이렇게 정의하고 있다.고차원의 모듈은 저차원의 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화 된 것에 의존해야 한다.추상화 된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화 된 것에 의존해야 한다.고수준 모듈 : 어떤 의미가 있는 단일 기능을 제공하는 모듈저..
선언형 / 명령형 프로그래밍선언형 프로그래밍명령형 프로그래밍선언형? 명령형?선언형 프로그래밍선언형 프로그래밍은 아래 두 가지 뜻으로 통용되고 있다고 한다.프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 '선언형' 이라고 한다. 웹 페이지는 선언형인데, 웹 페이지의 제목, 글꼴, 본문, 그림과 같이 '무엇' 이 나타나야 하는지를 묘사하는 것이지 '어떤 방법으로' 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하는 것이 아니다.프로그램이 함수형 프로그래밍 언어, 논리형 프로그래밍 언어, 혹은 제한형 프로그래밍 언어로 쓰인 경우에 '선언형' 이라고 한다.이 정의에서는 명령형 언어와 대비되는 프로그래밍 언어들을 선언형으로 통칭하는 것이다.선언형 프로그래밍 언어 : Lisp, H..
개방-폐쇄 원칙 (Open-Closed Principle, OCP)개방-폐쇄 원칙 ?개방-폐쇄 원칙 예제References 개방-폐쇄 원칙 ?소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.위키백과에 간단명료하게 정리되어있어 인용을 하자면,확장에 대해 열려 있다.이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다. 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다.수정에 대해 닫혀 있다.모듈의 소스 코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다.개인적으로 확장과 수정을 따로 생각하지 않는 것이 이해가 잘 되었다.확장성을 고려하여 설계함으로써 수정사항이 발생..
단일 책임 원칙 (Single Responsibility Principle, SRP)단일 책임 원칙 ?References 단일 책임 원칙 ?클래스를 변경하는 이유는 단 한 가지여야 한다.위키 백과에 따르면 단일 책임 원칙이란,모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 예를 들어 보고서를 편집하고 출력하는 모듈이 있다고 가정한다. 이 모듈은 보고서의 내용, 형식의 변경을 이유로 모듈이 변경될 두 가지의 사유를 가질 수 있다. 허나 단일 책임 원칙에 의하면, 두 측면이 실제론 분리된 두 책임 때문이기에 분리된 클래스나 모듈로 나누어야 하고 다른 시기에 다른 이유로 변경되어야 하는 두 가지를 묶는 것은 나쁜 설계일 수 있다고 한다.쉽게 말하면, 하나의 클래스는 ..
객체 지향 설계 (SOLID)객체 지향 설계 ?References 객체 지향 설계200년대 초반, 로버트 C. 마틴이 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을로버트 C. 마틴 '클린 코드', '클린 코더' 의 저자로 여기서 설명한 SOLID 원칙을 명명했다고 한다.이 원칙들은 '클린 코드' 를 기반으로 설명하고 있으니, 원한다면 책을 통해 깊이 공부하는 것이 좋을 것 같다.마이클 페더스가 각 원칙의 앞 머리를 따서 묶은 후 소개한 것이다.SOLID 원칙들은 자기 자신 클래스 안에 응집도는 내부적으로 높이고, 타 클래스들간 결합도를 낮추는 High Cohesion - Loose Coupling(높은 응집도 - 느슨한 결합도) 원칙을 객체 지향의 관점에서 도입한 것이다.좋은 소프트웨어는..
리스코프 치환 원칙(Liskov substitution principle, LSP)Effective Java 를 보다가 접했는데, 검색해보니 객체지향 5대 원칙(SOLID) 중 하나라고 한다.이것도 나중에 정리하기 위해 참고 링크를 걸어두어야 겠다.모든 개발자가 알아야만 하는 SOLID 원칙리스코프 치환 원칙 ?리스코프 치환 원칙 예제References리스코프 치환 원칙 ?상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.리스코프 치환 원칙은 기능의 명세(계약)에 대한 내용이다.기능 실행의 계약과 관련해서 흔히 발생하는 위반 사례는 다음과 같다.명시된 명세에서 벗어난 값을 리턴한다.명시된 명세에서 벗어난 예외를 발생시킨다.명시된 명세에서 벗어난 기능..
팩토리 메소드 패턴 (Factory Method Pattern)팩토리 메소드 패턴 ?예제References팩토리 메소드 패턴 ?객체를 만들어내는 부분을 서브 클래스에 위임하는 패턴팩토리 패턴에서 핵심은 클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 하여객체 생성을 캡슐화하고 구상 클래스에 대한 의존성을 줄이는 것에 있다.이러한 디자인 원칙이, 구상 클래스에 대한 의존성이 줄어드는 것, 의존성 뒤집기 원칙(Dependency Inversion Principle)*이다.의존성 뒤집기 원칙(Dependency Inversion Principle)고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되고, 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다는 원칙이다.[참고] : 의존 역전 ..