본문 바로가기

Study/Today I Learn

[TIL] 2019.04.22 - 객체지향프로그램

객체지향프로그램

객체지향의 특성에 대해 정리해보겠다. 현재 주어진 키워드는 다음과 같다.

캡슐화 상속 다형성 추상화 SOLID 클래스 객체

객체

객체 안의 변수를 필드(field)라 부르고, 객체 안의 함수를 메소드(method)라 부른다.

나의 이해: 속성과 행동이 있는 무언가, 사물

클래스

객체를 생성하는데 사용하는 것

나의 이해: 객체를 생성하기 위한 무언가, 분류

붕어빵? 붕어빵틀?

사람들은 종종 객체를 설명할 떄 종종

"클래스는 붕어빵틀이고, 객체는 붕어빵 붕어빵틀을 이용해서 붕어빵을 찍어낸다."

하지만 이것은 올바른 예시라고 할 수 없다. 만약 이 식이 성립한다면 이 식도 성립을 해야한다.

클래스 : 객체
붕어빵틀 : 붕어빵
설계도 : 건물
자동차설계도 : 자동차

클래스와 객체와의 관계는 무언가를 만들어 내는 틀과 만들어진 물건의 관계가 아니라 분류와 사물의 관계이다.

그럼 위에 예시들을 올바른 형태도 바꿔보겠다.

클래스 : 객체
붕어빵틀 : 금속붕어빵틀
붕어빵 : 슈크림붕어빵
설계도 : 코드스쿼드 설계도
건물 : 코드스쿼드 건물
자동차 설계도 : 현대 자동차 설계도
자동차 : 람보르기니

나중에 프로그램을 짤 때 이점을 유의해서 하도록 하겠다.

캡슐화

데이터와 데이터를 처리하는 함수를 하나로 묶는 것
정보은닉을 통해 높은 응집도와 낮은 결합도를 갖도록 한다.

나의 이해: 접근지정자를 이용하여 데이터에 접근하려면 특정 메서드를 이용하여 접근할 수 있도록 하는 것 (getter, setter)

상속

자식 클래스가 부모 클래스의 필드와 메서드를 사용할 수 있게해준다. 여러 클래스를 다중 상속 받지는 못한다.

나의 이해: 자식 클래스에서 부모 클래스의 필드나 메서드를 사용하기 위해서 하는 일

다형성

하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미

오버로딩 : 메서드 중복 정의 
오버라이딩 : 재정의

자바스크립트에서는 오버라이딩은 지원하지 않음

나의 이해: 같은 모양의 코드가 서로 다른 동작을 하는 것을 의미

추상화

실체들 간에 공통되는 특성을 추출한 것

나의 이해: 여러 클래스 중에서 필요한 부분들만 뽑아서 새로운 클래스를 만드는 것

SOLID

SRP (단일책임의 원칙: Single Responsibility Principle)

하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어야 한다는 원리

OCP (개방폐쇄의 원칙: Open Close Principle)

확장에는 열려있고, 변경에는 닫혀있어야 한다는 원리

LSP (리스코브 치환의 원칙: The Liskov Substitution Principle)

서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다는 원리

  • 두 개체가 동일한 일 = 하나의 클래스
  • 거의 똑같지만 약간 다른 것 = 인터페이스 상속
  • 공통된 연산 X = 2개의 클래스

ISP (인터페이스 분리의 원칙: Interface Segregation Principle)

한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리

DIP (의존성역전의 원칙: Dependency Inversion Principle)

구조적 디자인에서 발생하던 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는 의미의역전입니다. 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 메시지를 주고 받음으로써 관계를 최대한 느슨하게 만드는 원칙

회고

위에 내용들은 대충 이해를 하겠는데 SOLID 원칙은 언어적인 이해가 필요할 것 같다. 너무 복사 붙여넣기만 한 것같아서 조금 더 공부한 후 추가 작성하겠다.

참고 사이트

https://luckyyowu.tistory.com/190
https://devheat.tistory.com/14?category=663935

https://javacpro.tistory.com/31

http://blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220960019390&beginTime=0&jumpingVid=&from=section&redirect=Log&widgetTypeCall=true

http://www.nextree.co.kr/p6960/

'Study > Today I Learn' 카테고리의 다른 글

[TIL] 2019.04.23 - new operator  (0) 2019.04.23
[TIL] 2019.04.23 - git 키워드 정리  (0) 2019.04.23
[TIL] 2019.04.20 - Computer Science  (0) 2019.04.20
[TIL] 2019.04.16 - Linked List  (0) 2019.04.16
[TIL] 2019.04.11 - Computer Science  (0) 2019.04.11