-
객체지향 패러다임 개념 다지기 절차지향 방식으로 계산기 프로그램 만들기 객체지향 패러다임에 맞게 리팩토링 인사관리 시스템을 객체지향으로 만들기 객체지향 패러다임
- 적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것
- 점점 증가하는 SW 복잡도를 낮추기 위해 객체지향 패러다임 대두 (기능 중심 -> 객체와 관계 중심)
- 개인적으로 생각하는 두 가지 중요 포인트
- 객체지향에 맞게 클래스가 아닌 객체에 초점을 맞추는 것
- 객체들에게 얼마나 적절한 역할과 책임을 할당하는지
절치지향 프로그래밍 vs 객체지향 프로그래밍
- 책임이 한곳에 집중돼 있는 방식 (getter)
- 책임이 여러 객체로 적절히 분산돼 있는 방식
객체지향의 4가지 특징 (다른 패러다임과 구분되는 중요한 특징)
- 추상화 (Abstraction)
더보기- 불필요한 부분을 제거함으로써 필요한 부분(핵심)만 나타낸 것
- 일반화, 단순화
- 복잡성을 낮추기 위한 도구
- 다형성 (Polymorphism)
더보기- 다양한 형태(모습)를 가지는 것
- 하나의 객체가 여러 타입을 가짐 (One Object - Many Type)
- 하나의 타입으로 여러 종류의 객체를 참조 (One Type - Many Object)- 캡슐화 (Encapsulation)
더보기- 객체 내부의 세부 사항을 외부로부터 감추는 것
- 캡슐화의 목적은 인터페이스만 공개해서 변경하기 쉬운 코드를 만들기 위함
- 상속 (Inheritance)
객체지향의 5가지 설계 원칙 (SOLID)
- SRP : Single Responsibility Principle (단일 책임의 원칙)
- OCP : Open/Closed Principle (개방 폐쇄의 원칙)
더보기- 확장에는 열려있고, 변경에는 닫혀있다.
- 기존 코드를 변경하지 않고 기능을 추가할 수 있어야 한다.- LSP : Liskov’s Substitution Principle (리스코프 치환의 원칙)
더보기- 상위 타입의 객체를 하위 타입 객체로 치환해도 동작에 문제가 없어야 한다.
- "하위 클래스 is a kind of 상위 클래스" & "구현 클래스 is able to 인터페이스"를 만족한다면 해당 원칙을 잘 지키고 있는 것이다.
- ISP : Interface Segregation Principle (인터페이스 분리의 원칙)
더보기- 많은 기능을 가진 인터페이스를 작은 단위로 분리시킴으로써 클라이언트에게 필요한 인터페이스들만 구현하도록 한다.
- 클라이언트가 사용하지 않는 기능에 의존하게 되면 예상치 못한 문제가 발생할 수 있다.
- DIP : Dependency Inversion Principle (의존성 역전의 원칙)
더보기- 의존 관계를 맺을 때 자주 변경되는 쪽이 아니라 변경이 거의 일어나지 않는 쪽에 의존하라.
- 자기 보다 변하기 쉬운 것에 의존하게 되면 변화에 영향을 많이 받기 때문에 추상화된 인터페이스나 상위 클래스를 둬서 변화에 대해 영향을 받지 않게 하기 위함
객체지향 설계 및 구현
high cohesion, loose coupling
- 도메인을 구성하는 객체에는 어떤 것들이 있는지 고민
- 객체들 간의 관계를 고민
- 객체를 정적인 타입으로 추상화해서 도메인 모델링 하기
- 객체들이 어떤 상태와 행동을 가지는지 결정되면, 공통적인 상태와 행동을 가진 객체들을 타입으로 분류하고 이 타입을 기반으로 클래스를 구현한다.
- 클래스는 공통적인 상태와 행동을 가지는 객체들을 추상화한 것
- 복잡성을 낮추기 위함
- 협력을 설계
- 적절한 객체에게 적절한 책임을 할당
- 객체들을 포괄하는 타입에 적절한 책임을 할당
- 클라이언트와 협력할 수 있는 public 인터페이스 정의
- 구현하기
- 구현 도중 얼마든지 객체의 인터페이스는 변경될 수 있음
- 객체의 책임을 결정한 후에 해당 책임을 수행하는데 필요한 객체 속성을 결정
- 책임 결정
- 속성 결정
- 참고
- 객체지향 세계에서는 모든 객체가 능동적인 존재
객체지향 프로그래밍 실습
- 사칙연산 계산기 구현
- 요구사항
- 간단한 사칙연산을 할 수 있다.
- 양수로만 계산할 수 있다.
- 나눗셈에서 0을 나누는 경우 IllegalArgument 예외를 발생시킨다.
- MVC패턴(Model-View-Controller) 기반으로 구현한다.
- 실습 코드
- 요구사항
- 학점계산기 구현
- 요구사항
- 평균학점 계산 방법 = (학점수 × 교과목 평점)의 합계/수강신청 총 학점 수
- MVC패턴(Model-View-Controller) 기반으로 구현한다.
- 일급 컬렉션 사용
- Collection을 Wrapping한 클래스 (그 외 다른 멤버 변수는 없어야 함)
- 실습 코드
- 요구사항
- 인사관리 시스템 구현
- 요구사항
- MVC패턴(Model-View-Controller) 기반으로 구현한다.
- 실습 코드
- 요구사항
'교육 자료' 카테고리의 다른 글
JDBC 프로그래밍 (0) 2022.08.11 도커 및 도커 컴포즈 소개 (0) 2022.08.05 멀티 스레드 환경에서 동시성 이슈 (0) 2022.07.25 웹 애플리케이션 이해 (0) 2022.07.18 테스트 코드 실습 (0) 2022.07.11