본문 바로가기
  • Junior developer :)
TypeScript

Type Script_07 OOP(객체지향프로그램)

by ram_Hi 2021. 4. 16.

항상 타입 보장하기!   타입은 명확하게!     타입은 엄격하게!     관리하기! 


OOP란?

 - Object Oriented Programming 객체지향 프로그래밍의 약자

 - 객체의 관점에서 프로그래밍 하는 것을 말한다.

 

 - Object(객체) = 대상(구성 요소) / Class = 객체가 갖는 속성 또는 메소드를 정의

 - 예전부터 늘 흔하게 들었던 예시가 있다. (아직 이것 만한 예시가 없어서 일까?ㅎ)

   붕어빵 틀은 붕어빵을 찍어내는 행동을 가진 Class / 찍어 나온 붕어빵은 Object

   --> Class + 커스타드크림 = 슈크림 붕어빵(Object)

        Class + 초코크림 = 초코 붕어빵(Object)

 - 객체지향을 사용하면 코드의 중복을 줄일 수 있어 가독성과 생산성이 높아진다.

   그리고! 제일 좋은 장점은 유지보수 및 확장성이 높아지는 것!👍 


OOP의 4가지 특성

1. 캡슐화(Encapsulation)

 - 서로 연관되어 있는 데이터와 함수들을 결합시키는 것. 흔히 말하는 정보은닉화 하여 데이터들을 관리하는 것.

 - 핵심은 외부에서 접근을 허용하고 싶지 않을 때 사용된다는 것이다.

 

 - 데이터와 함수의 허용여부 결정해주는 방법 => 접근제한자(access modifier) 문법 사용

   ㄴ public : 클래스 외부에서 제한 없이 접근 가능

   ㄴ private : 클래스 내부에서만 접근 가능. 외부에서는 존재를 모름.

   ㄴ protected : 상속한 하위 클래스에서만 접근 가능


2. 추상화(Abstraction)

 - 공통의 속성이나 기능을 묶어 이름을 붙이는 것. 상위 카테고리를 붙이는 느낌이라면 이해가 쉬울 것 같다.

 - 내부에서 구현하는 상세한 내용들을 외부에서는 직접적으로 신경 쓰지 않고 구현한 기능만 가져다 쓰는 것.

 - 인터페이스(함수) 만을 통해 사용되어진다. => A implements B (A는 B를 구현한다)

interface IAnimal { // 인터페이스 앞에 I를 붙여 표현
 eat() : number;
}

class Dog implements IAnimal {
}

3. 상속성(Inheritance)

 - 상위 개념의 특징을 하위 개념이 물려 받아 사용하는 것.

 - 쉽게 말하자면, 부모로부터 상속 받는 것. protected 접근 제한자 사용된 항목도 가져다 쓸 수 있다.

 - super를 통해 부모의 함수에 접근할 수 있다. 

 - A extends B (A는 B를 확장한다 / B가 부모클래스가 됨)

 

 - 주의 !

   ㄴ constructor가 private일 경우 상속이 되지 않음. public, protected를 사용해야 상속이 된다는 말!

   ㄴ 자식 클래스에서 constructor는 반드시 super를 호출해야함.

   ㄴ 상속은 두가지 이상 할 수 없고, 부모클래스에서 변화가 있을 경우 그대로 자식 클래스에서도 영향이 있음.


4. 다형성(Polymorphism)

 - 부모클래스에서 물려받은 가상 함수를 자식 클래스에서 오버라이딩(overwriting) 되어 사용되는 것.

   즉, 다양하게 사용성을 넓히는 것.  

댓글