항해를 시작한지 벌써 2주차입니다.
하루하루가 정신이 없고 할 것들이 쏟아져 나오고 있습니다.
금주를 돌아보니 또 별로 한건 없는데 한주가 지나갔다는 생각이 드네요.
몇몇 벌써 하차 하시는 분들도 많이 보이네요. ㅠ
금주에는 알고리즘 마무리와 주특기 입문을 시작하였습니다.
알고리즘(11조!) 40문제 풀기와 테스트를 잘 풀 수 있도록 도와주신 팀원 분들과 항해 너무 감사합니다!!
지각을 너무 많이 했던것 같지만 우리 모닝엔젤 매니저님이 계셨기 때문에 일어날 수 있었습니다.!!
다음주에는 지각을 하지 않도록 일정 조절, 컨디션 조절 잘 하겠습니다.!!!
주특기 입문에 들어선 만큼 오늘은 객체지향 프로그래밍에 대해 나눠볼까 합니다.
-- 목차 --
객체지향 프로그래밍
기본 구성 요소
특징
객체지향 설계과정
객체지향 설계원칙
객체지향 프로그래밍의 장, 단점
getter와 setter를 사용하는 이유
객체지향 프로그래밍
Object-Oriented Programming(OOP)
데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 포로그래밍 방법
기본 구성 요소
클래스(Class) - 같은 종류의 집단에 속하는 속성(Attribute)과 행위(Behavior)를 변수와 메서드로 정의한 것
객체(Object) - 클래스의 인스턴스(실제로 메모리상에 할당된 것)
객체는 자신 고유의 속성을 가지며 클래스에서 정의한 행위를 수행할 수 있다.
특징
추상화 | 공통의 속성이나 기능을 묶어 이름을 붙이는 것 |
캡슐화 | 기능과 특성의 모음을 클래스라는 캡슐에 분류해서 넣는 것, 높은 응집도(객체가 독립적으로 작용), 낮은 결합도(다른 모듈에 대한 의존도)를 유지(은닉화) => 요구사항 변경에 대처하는 좋은 설계 코드를 재수정 없이 재활용 / 접근 제어자를 통한 정보 은닉 |
상속 | 부모 클래스의 속성과 기능을 그대로 이어받아 사용할수 있게 하고, 기능의 일부분을 변경해야 할 경우 자식클래스에서 해당 기능만 다시 정의하여 사용할 수 있다. |
다형성 | 각자의 특성에 맞는 방식으로 동작하는 것 - 오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것 - 오버로딩 : 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는것 |
객체지향 설계과정
- 요구사항을 찾고 세분화한다. 그리고 알맞은 객체로 할당한다.
- 기능을 구현하는데 필요한 데이터를 객체에 추가한다.
- 해당 데이터를 이용하는 기능을 구현한다.(기능은 최대한 캡슐화)
- 객체간에 어떻게 메소드 호출을 주고받을 지 결정한다.
객체지향 설계 원칙
SOLID 원칙
Single Responsibility (SRP) 단일 책임 원칙 |
클래스는 단 한개의 책임(기능)을 가져야 한다. 클래스를 변경하는 이유는 단 하나여야 한다. 한 클래스가 여러개의 기능을 수행하면 클래스 내부의 함수끼리 강한 결합을 발생시킬수 있다. |
Open Closed(OCP) 개방 폐쇄 원칙 |
확장에는 열려있어야 하고, 변경에는 닫혀 있어야 한다. 기존의 코드를 변경하지 않고 기능을 수정하거나 추가 할 수 있도록 설계해야 한다. 유연성, 재사용성, 유지보수성을 높일 수 있다. |
Liskov Substitution(LSP) 리스코프 치환 원칙 |
하위 타입 객체는 상위 타입 객체에서 가능한 행위를 수행 할 수 있어야 함. -> 상위 타입 객체를 하위 타입 객체로 치환해도 정상적으로 동작해야 함. 일관성 있는 관계로 만들어야 한다. LSP를 지키지 않으면 OCP도 위반된다. |
Interface Segregation(ISP) 인터페이스 분리 원칙 |
클라이언트는 자신이 사용하는 메소드에만 의존해야 한다. 클라이언트가 필요로 하는 인터페이스들을 분리함으로써, 클라이언트가 사용하지 않는 인터페이스에 변경이 발생하더라도 영향을 받지 않도록 만들어야 하는 것이 핵심. |
Dependency Inversion(DIP) 의존 역전 원칙 |
의존 관계를 맺을 때 변하기 쉬운것 보다는 변하기 어려운것에 의존해야 한다. -> 구체화된 클래스에 의존하기 보다는 추상클래스나 인터페이스에 의존해야 한다. 고수준 모듈은 저수준 모듈의 구현에 의존하면 안된다. |
* SRP 와 ISP는 객체가 커지는 것을 막아준다. ( 응집도를 높여주고 결합도를 낮춰춘다. )
* LSP와 DIP는 OCP를 서포트 한다. ( 의존도(결합도)를 낮춘다. )
객체지향 프로그래밍의 장, 단점
장점
- 코드 재사용이 용이 : 클래스를 가져와서 쓰거나 상속을 통해 확장하여 사용할 수 있다.
- 유지보수가 쉬움 : 수정해야하는 클래스 내부의 변수나 메서드 부분을 찾아서 수정하면 된다.
- 대형 프로젝트에 적합 : 클래스 단위로 모듈화시켜서 개발할 수 있으므로 개발할 때 업무 분담하기 쉽다.
단점
- 처리 속도가 상대적으로 느리다 ( 절차지향 프로그래밍 보다 )
- 객체가 많으면 용량이 커질 수 있다.
- 설계시 많은 시간과 노력이 필요하다.
getter, setter 를 사용하는 이유
private 접근 지정자로 변수를 지정하여 public 으로 get, set 메서드를 통해 접근하도록 한다.
메서드를 통해서 접근을 하면 매개변수가 올바르지 않은 입력을 받을 경우 사전에 처리할수 있게 제한하거나 조절할 수 있기 때문에 사용한다.
Reference
'항해99' 카테고리의 다른 글
CRUD 와 HTTP Method (0) | 2022.07.26 |
---|---|
[TIL] 항해14일차 (0) | 2022.07.25 |
[TIL] 항해 12일차 (0) | 2022.07.22 |
[TIL] 항해 11일차 (0) | 2022.07.21 |
[TIL] 항해 10일차 (0) | 2022.07.21 |
댓글