여러 서브클래스들의 템플릿을 정의할때 추상클래스를 사용한다.
다른 클래스가 작동할수있는 룰을 정의할때 인터페이스를 사용한다.
SOLID 원칙
:객체지향 설계에서 지켜줘야 할 5개의 원칙을 말한다.
1. SRP(Single Responsibility Principle) 단일 책임 원칙
:객체는 단 하나의 책임만 가져야 한다는 원칙
흔히 함수는 하나의 기능만 수행하도록 구현되어야 하는데, 여기서 예를들면
Calculator() 함수가 덧셈,뺄셈,곱셈,나눗셈을 모두 한다면 이는 좋은 설계가 아니다.
덧셈,뺄셈,곱셈,나눗셈이 각각 함수로 정의되어 있어야 유지보수가 쉬울 것이다.
마찬가지로 Calculator 객체가 있을 때, Calculator 객체는 덧셈,뺄셈,곱셈,나눗셈만 할 수 있어야 한다.
즉, 사칙연산에 대한 책임만 가지고 있어야 한다.
이후 계산기에 알람 기능을 추가한다고 해서 alarm()함수를 Calculator의 기능으로 추가하는 것은 SRP에 위배된다.
2번은 alarm()기능을 넣어 단일책임원칙을 위반했으며 3번은 이를 개선한 다이어그램이다.
2. OCP(Open-Closed Principle) 개방-폐쇄 원칙
: 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙
즉 , 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적
이를 만족하려면 캡슐화를 통해 여러 객체에서 사용하는 같은 기능을 인터페이스에 정의하는 방법이 있다.
3. LSP 리스코프 치환 원칙
: 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 원칙
자식 클래스가 부모 클래스를 대체하기 위해서는 부모의 기능에 대해 오버라이드 되지 않도록 한다.
즉, 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않도록 확장만 수행하도록 한다.
오버라이드는 OOP의 특징이지만, LSP에 따르면 객체지향적으로 설계 하기 위해서는 오버라이드는 가급적 피하는게 낫다.
위와 같은 직사각형과 정사각형을 뜻하는 코드가 있다고 가정한다.
increaseHeight() 메소드를 사용하는 코드는 이 메소드가 실행 후에 width 보다 height 값이 크다고 가정한다.
여기서 매개변수로 Square객체가 전달되면 이 가정이 깨져버린다.
만약, 위를 해결하기 위해 아래와 같은 코드를 쓴다면?
instanceof 연산자를 사용한다는 것 자체가 LSP를 위반하는 것이 되며
이는 결국 increaseHeight() 메소드가 Rectangle의 확장에 열려 있지 않다는 것을 의미한다.
4. ISP (Interface Segregation Principle) 인터페이스 분리 원칙
: 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
= 하나의 거대한 인터페이스 보다는 여러 개의 구체적인 인터페이스가 낫다.
SRP는 객체의 단일 책임을 뜻한다면, ISP는 인터페이스의 단일 책임을 의미한다.
안좋은 예)
좋은 예)
5. DIP ( Dependency Inversion Principle) 의존 역전 법칙
: 객체들이 서로 정보를 주고 받을 때 의존 관계가 형성되는데, 이 때 객체들은 나름대로의 원칙을 갖고
정보를 주고 받아야 한다.
나름대로의 원칙 : 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 함을 의미
일반적으로 인터페이스를 활용하면 이 원칙을 준수한다.(캡슐화)
위의 그림에서 Client는 crying() 메서드에 직접 접근하지 않고 인터페이스를 통해 crying()을 호출함으로써
DIP를 만족시킨다.
AmaterasUML 적용
위 사이트에서 .zip을 다운받아서 압축을 푼뒤
C:\dev\eclipse\plugins 에넣은뒤 이클립스 재시작한다.
프로젝트 아래에 폴더를 생성하고 폴더 우클릭후 NEW -> other 을 누른 뒤, 아마테라스를 선택한다.
원하는 클래스를 선택한다.
'인공지능 교육 > Java' 카테고리의 다른 글
21/05/04 7일차 인공지능 교육 (0) | 2021.05.06 |
---|---|
21/05/04 6일차 인공지능 교육 (0) | 2021.05.04 |
21/05/03 5일차 인공지능 교육 (0) | 2021.05.03 |
21/04/30 4일차 인공지능 교육 (0) | 2021.04.30 |