Elice SW 2/TIL
DAY 24 - TIL (2)
자이구
2022. 5. 7. 17:38
객체 지향 프로그래밍
OOP는 컴퓨터 프로그램을 객체의 모임으로 파악하려는 프로그래밍 패러다임
객체들은 서로 메세지를 주고 받을 수 있으며 데이터를 처리할 수 있음
강한 응집력과 약한 결합력
장점
- 프로그램을 유연하고 변경이 용이
- 프로그램의 개발과 보수를 간편하게 만듬
- 직관적인 코드 분석을 가능하게 함
클래스
객체를 만들기 위한 설계도, 객체의 기능(메서드)과 속성(변수)을 구현한 것
클래스의 요소: 멤버/필드/생성자/메소드
인스턴스 : new 연산자에 의해서 생성된 객체
클래스 생성하기
- new를 사용하여 클래스의 인스턴스를 생성 - 생성자사용
- 클래스 안에서 this를 앞에 붙이면 클래스의 멤버를 의미
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
say() {
return "Hello, My name is "+ this.name;
}
}
let person = new Person("june");
접근 제어자
속성 또는 메소드로의 접근을 제한하기 위해 사용
- public
- protected
- private
--Java와 다르게 package 개념이 없어 default 접근 제어자는 존재하지 않음
public
프로그램 내에서 선언된 멤버들이 자유롭게 접근할 수 있음
타입 스크립트에서 기본적으로 public으로 선언
private
멤버가 포함된 클래스 외부에서의 접근을 막음
protected
멤버가 포함된 클래스와 그 하위 클래스 외부에서의 접근을 막음
상속
- 한 클래스가 다른 클래스에서 정의된 속성(자료,함수)를 이어받아 그대로 사용
- 이미 정의된 클래스를 바탕으로 필요한 기능을 추가하여 정의
- 파생된 클래스는 하위클래스
- 기초 클래스는 상위클래스
상속을 하는 이유
- 상속을 통하여 기존 클래스의 속성(자료,함수) 재사용
- 기존 클래스의 일부 변경도 가능
- 상속을 이용하게 되면 복잡한 GUI 프로그램을 순식간에 작성
- 상속은 이미 작성된 검증된 소프트웨어를 재사용
- 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수
- 코드의 중복 감소
Getters & Setters / readonly / static
Getters & Setters
비공개로 설정하려는 속성은 private로 설정하고, 속성값을 읽고 수정하는 getter/setter 함수를 사용
readonly
읽기만 가능한 속성을 선언하기 위해 사용
static
전역 멤버를 선언할 때 사용
전역멤버 : 객체마다 할당되지 않고 클래스의 모든 객체가 공유하는 멤버
추상클래스
- 추상 클래스는 다른 클래스들이 파생될 수 있는 기초 클래스
- 직접 인스턴스화 할 수 없음
- abstract 키워드는 추상 클래스나 추상 메소드를 정의하는데 사용
- 추상 메소드는 클래스에는 구현되어 있지 않고, 파생된 클래스에서 구현
추상 클래스를 활용한 디자인 패턴
- 프로그램 일부분을 서브 클래스로 캡슐화해 전체 구조를 바꾸지 않고 특정 단계의 기능을 바꾸는 것을 디자인 패턴
- 전체적인 알고리즘은 상위 클래스에서 구현하고 다른 부분은 하위 클래스에서 구현
- 전체 구조는 유사하지만 부분적으로 다른 구문으로 구성된 메소드의 코드 중복을 최소화 할 수 있음
abstract class Parent {
//템플릿 메소드: 자식에서 공통적으로 사용하는 부분(someMethod)
public do() {
console.log("Parent에서 실행 - 상");
this.hook(); // 훅 메소드: Child에서 구현해야 할 부분
console.log("Parent에서 실행 - 하");
}
abstract hook(): void
}
class Child extends Parent {
hook(): void {
console.log("Child");
}
}
const child = new Child();
child.do();
// 실행 결과
// Parent에서 실행 - 상
// Child
// Parent에서 실행 - 하