객체지향 핵심개념 OOP

Nolec·2022년 5월 13일
0

OOP 핵심개념

캡슐화

👉 사용하고자 하는 데이터 → class안에 있는 해당 데이터를 이용하는 함수등을 잘 정리해 놓은 것
  • 원하는 데이터를 잘 숨길 수 있음
    • private 등을 이용하여 외부에서 조작하지 못하게 가능
    • 어떻게 클래스 내부에 접근 혹은 수정하는지 결정하는 권한을 제공
class Calculator {
	constructor(
	private firstName : string,
	private lastName : string,
	private shares : number,
	private company : string
	) {}
	
	public calculateNetWorth() {
		return this.shares * getSharePrice(this.company);
	}
	public getName() {
		return `${this.firstName} ${this.lastName}`
	}
}

const nolec = new Calculator("nolec", "Noh", 100000, "삼성전자");
console.log(nolec.getName());

추상화

👉 구현에 대한 세부 정보를 숨기는 용도의 일반 인터페이스를 지정하는 행위
  • 일반 차량을 생각
    • 폐달, 운전대, 휠, 각종 버튼들은 우리한테 직접적으로 노출되어 있고 그 인터페이스(앞서 이야기했던 장치들)를 사용할 수 있다.
    • 하지만 어떻게 그 장치들을 이용하여 자동차가 작동이 되는지 세부적인 기능들은 명시되어 있지 않음

위 내용을 생각하면서 JS의 배열을 추상화해보자

class BetterArray {
	private items: string[];
	constructor(){
		this.items = [];
	}

	public getItems(){
		return [...this.items];
	}
	public addItem(item: string){
		this.items.push(item);
	}
	public removeItem(itemToDelete: string){
		this.items = this.items.filter((item) => item !== itemToDelete);
	}
	public modifyItem(itemToChange: string, newValue: string){
		const index = this.items.indexOf(itemToChange);
		if(index !== -1){
			this.items[index] = newValue			
		}
	}
}
  • 위 class를 보면 BetterArray를 사용하는 사용자는 getItems, addItem의 메소드를 그냥 가져다 사용하기만 하면 원하는 기능이 작동된다.
  • 굳이 내부의 세부 구현코드를 알지 않아도 된다.
  • 그리고 내부 구현코드가 수정되어도 사용자는 따로 코드 수정이 이루어질 필요가 없다.

다형성

👉 멀티플 폼(multiple forms), 멀티플 쉐입(multiple shapes)
  • 상속이랑 연관되어 있다.
class Person {
	public sayHello(){
		return "🖐🖐";
	}
	public sayBye(){
		return "bye~";
	}
}

class Korean extends Person {}
class Italian extends Person {}
  • 위 두 클래스는 모두 Person에서 상속받아 이루어진 클래스이다.
  • 그리고 모두 같은 sayHello 메소드를 갖는다.
  • 하지만 한국인과 이탈리아인의 sayHello 메소드를 다르게 사용하고 싶다면? 여기서 다형성이 등장
class Korean extends Person {
	public sayHello(){
		return "안녕하세요";
	}
}
  • Korean 클래스는 Person의 sayHello 메소드를 오버라이딩한 것이다.
  • 그리고 위 sayHello 메소드의 타입을 그대로 유지해줘야햔다.
  • 즉 sayHello → string을 리턴해줘야하는 구조를 Korean클래스에서도 유지시켜줘야함

덕분에 클래스의 핵심은 그대로 있으며 구현방식의 모양과 모습만 달라지게 되는 것

위 글은 노마드코더의 객체지향 영상을 참고하였습니다.

profile
노렉마지노

0개의 댓글