post-thumbnail

의존 역전 원칙 (DIP)

객체 사이에 서로 도움을 주고받으면 의존 관계가 발생한다. 의존 역전 원칙은 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하지 말라는 원칙이다. 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙이다. 변하기 쉬운 것 구체적인 방식, 사물 등 변하기 어려운 것 정책, 전략과 같은 큰 흐름이나 개념 같은 추상적인 것 다음은 예시다. 로봇 장난감을 가지고 노는 경우, 실제 가지고 노는 구체적인 장난감(로봇, 자동차, 레고)은 변하기 쉬운 것이다. 구체적인 장난감은 변하지만 아이가 장난감을 가지고 노는 사실은 변하기 어려운 것이다. 객체지향 관점에서는 변하기 어려운 추상적인 것들을 표현하는 수단으로 추상 클래스와 **

2022년 12월 9일
·
0개의 댓글
·
post-thumbnail

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

인터페이스 분리 원칙은 인터페이스를 클라이언트에 특화되도록 분리시키는 설계 원칙이다. 프로그래밍도 잘하고 영어도 잘 구사하고 발표도 잘하는 다방면으로 소질이 많은 사람이 많아졌다. 그러나 실제 업무에서는 위에 모든 능력을 한꺼번에 요구하는 경우가 별로 없다. 위와 같은 능력자는 개발자로서의 역할이 필요할 때는 프로그래밍 능력만 사용한다. 해외 영업 사원으로서의 역할이 필요할 때 외국어 능력과 발표 능력을 사용한다. 능력자의 프로그래밍 능력에 변화가 생기더라도 외국어 능력이나 발표 능력을 사용하는 영업 업무에는 영향을 미치지 않는다. 하지만 높지만 개발 업무 부서에는 영향을 미칠 수 있다. 인터페이스 분리 원칙은 위와 같은 관점에서 생긴 객체지향 설계 원칙이다. 클라이언트 자신이 이용하지 않는 기능에는 영향을 받지 않아야 한다는 내용이다. 다음은 복합기의 클래스 다이어그램이다. ![](https://velog.velcdn.com/images/leehanju408/p

2022년 12월 9일
·
0개의 댓글
·

리스코프 치환 원칙 (LSP)

리스코프 치환 원칙은 일반화 관계에 대한 이야기이며 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 뜻이다. LSP를 만족하면 프로그램에서 부모 클래스의 인스턴스 대신에 자식 클래스의 인스턴스로 대체해도 프로그램의 의미는 변화되지 않는다. 이를 위해 부모 클래스와 자식 클래스 사이는 행위가 일관되어야 한다. LSP를 만족하려면 부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 대신할 수 있어야 한다. 부모 클래스의 인스턴스가 실행하는 행위는 자식 클래스의 인스턴스들도 실행할 수 있어야 한다. 현재 Bag 클래스의 setPrice와 getPrice 메서드가 재정의되지 않았으므로 LSP를 위반하지 않는다. 그러나 다음과 같이 setPrice 메서드를 오버라이드하면 부모 클래스와 값이 달라져 LSP를 위반한다. 다음과 같이 코드를 실행하면 상위 클래스인 Bag의 setPrice를 호출할 수 없다. Bag이냐 DiscountBa

2022년 12월 9일
·
0개의 댓글
·
post-thumbnail

개방-폐쇄 원칙(OCP)

개방 폐쇄 원칙은 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다는 뜻이다. 성적표나 출석부에 학생의 성적이나 출석 기록을 출력하는 기능을 사용하는 SomeClient 예는 다음과 같다. 만약 도서관 명부와 같은 새로운 매체에 학생의 대여 기록을 출력하는 경우는 다음과 같이 할 수 있다. 도서관 대여 명부 클래스를 만들어 SomeClient 클래스가 이 기능을 이용하도록 할 수 있다. 그러나 이 방식은 OCP를 위반한다. 새로운 기능을 추가하려고 SomeClient 클래스를 수정해야 하기 때문이다. OCP를 위반하지 않은 설계를 할 때 가장 중요한 것은 무엇이 변하는 것인지 아닌지를 구분해야 한다는 점이다. 위 경우에 변하는 것은 다음과 같은 학생의

2022년 12월 9일
·
0개의 댓글
·
post-thumbnail

단일책임원칙(SRP)

책임의 의미 책임의 기본 단위는 객체를 지칭한다. 즉 객체는 단 하나의 책임만 가져야 한다는 의미다. 책임은 보통 ‘해야 하는 것’이나 ‘할 수 있는 것’으로 간주할 수 있다. 객체에 책임을 할당할 때는 어떤 객체보다도 작업을 잘 할수 있는 객체에 책임을 할당해야 한다. 지금 Student 클래스는 너무 많은 책임을 수행한다. Student 클래스는 수강 과목을 추가하고 조회하는 일을 가장 잘할 수 있다. 따라서 Student 클래스는 수강 과목을 추가하고 조회하는 책임만 수행하도록 하는 것이 SRP를 따르는 설계다. 변경 SRP를 실효성 있게 설계하려면 책임을 좀 더 현실적인 개념으로 파악해야한다. 설계 원칙을 학습하는 이유는 예측 못한 변경사항이 발생해도 유현하고 확장성이 있도록 시스템 구조를 설계하기 위해서다. 좋은 설계란 기본적으로 새로운 요구사항이나 변경이 있을 때 영향 받는 부분을 줄여야 한다. 위 Student 클래스의 변경

2022년 12월 8일
·
0개의 댓글
·

객체지향 3요소

추상화 추상화란 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업이다. 추상화 덕분에 관심이 쏠리는 부분에 더욱 집중할 수 있다. 객체간에 공통적인 특성을 뽑아서 묶어내면 추상화를 할 수 있다. 커다란 운동장에 수많은 자동차가 주차되어 있다고 가정한다. 이 자동차들을 그룹화할 때 추상화를 이용할 수 있다. 어떤 사람은 탈 수 있는 승객의 수를 기준으로 승합차와 승용차로 그룹화할 수 있다. 어떤 사람은 문의 개수에 따라 세단과 쿠페로 그룹화하려고 할 것이다. 어떤 사람은 자동차 관리법에 명시된 대로 그룹화하려고 할 것이다. 이처럼 사물들의 공통적인 특징을 파악해서 이를 하나의 개념으로 다루는 수단이 추상화다. 추상화는 객체지향에서 중요하다. 추상화가 없다면 각각의 개체, 즉 각각의 자동차들을 구분해야한다. 추상화가 없다면 모든 자동차마다 엔진 오일을 교환하는 기능을 추가해야 한다. 추상화를 이용하면 다음과 같이 Car의 구현체만 바꾸면 된다.

2022년 11월 29일
·
0개의 댓글
·