본문 바로가기
항해99

[WIL] 항해 2주차

by yeaseul912 2022. 7. 24.
728x90

항해를 시작한지 벌써 2주차입니다.

하루하루가 정신이 없고 할 것들이 쏟아져 나오고 있습니다.

금주를 돌아보니 또 별로 한건 없는데 한주가 지나갔다는 생각이 드네요.

몇몇 벌써 하차 하시는 분들도 많이 보이네요. ㅠ

금주에는 알고리즘 마무리와 주특기 입문을 시작하였습니다.

알고리즘(11조!) 40문제 풀기와 테스트를 잘 풀 수 있도록 도와주신 팀원 분들과 항해 너무 감사합니다!!

지각을 너무 많이 했던것 같지만 우리 모닝엔젤 매니저님이 계셨기 때문에 일어날 수 있었습니다.!!

다음주에는 지각을 하지 않도록 일정 조절, 컨디션 조절 잘 하겠습니다.!!!

 

주특기 입문에 들어선 만큼 오늘은 객체지향 프로그래밍에 대해 나눠볼까 합니다.

-- 목차 --
객체지향 프로그래밍
기본 구성 요소
특징
객체지향 설계과정
객체지향 설계원칙
객체지향 프로그래밍의 장, 단점
getter와 setter를 사용하는 이유
객체지향 프로그래밍

Object-Oriented Programming(OOP)

데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 포로그래밍 방법

 

기본 구성 요소

클래스(Class) - 같은 종류의 집단에 속하는 속성(Attribute)과 행위(Behavior)를 변수와 메서드로 정의한 것

객체(Object) - 클래스의 인스턴스(실제로 메모리상에 할당된 것)

                         객체는 자신 고유의 속성을 가지며 클래스에서 정의한 행위를 수행할 수 있다.

 

특징
추상화 공통의 속성이나 기능을 묶어 이름을 붙이는 것
캡슐화 기능과 특성의 모음을 클래스라는 캡슐에 분류해서 넣는 것,
높은 응집도(객체가 독립적으로 작용), 낮은 결합도(다른 모듈에 대한 의존도)를 유지(은닉화)
  => 요구사항 변경에 대처하는 좋은 설계
코드를 재수정 없이 재활용 / 접근 제어자를 통한 정보 은닉
상속 부모 클래스의 속성과 기능을 그대로 이어받아 사용할수 있게 하고, 
기능의 일부분을 변경해야 할 경우 자식클래스에서 해당 기능만 다시 정의하여 사용할 수 있다.
다형성 각자의 특성에 맞는 방식으로 동작하는 것
    - 오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는 것
    - 오버로딩 : 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는것

 

객체지향 설계과정
  1. 요구사항을 찾고 세분화한다. 그리고 알맞은 객체로 할당한다.
  2. 기능을 구현하는데 필요한 데이터를 객체에 추가한다.
  3. 해당 데이터를 이용하는 기능을 구현한다.(기능은 최대한 캡슐화)
  4. 객체간에 어떻게 메소드 호출을 주고받을 지 결정한다.
  5.  
객체지향 설계 원칙

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 

SOLID 원칙 어렵지 않다

객체지향 프로그래밍 이해하기

객체 지향 프로그래밍

객체 지향 프로그래밍이 뭔가요?

반응형

'항해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

댓글