728x90
반응형
Object-Oriented-Programming
1. 절차지향 vs 객체지향
🔎 절차지향 프로그래밍
프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법. 순차적인 처리가 중요시 되며 컴퓨터의 처리 방식과 유사하기 때문에 시간적으로 유리하다. 하지만 유지보수와 디버깅이 어렵다는 단점이 있다.
.
🔎 객체지향 프로그래밍
프로그램을 객체 단위로 나누고 이들의 상호작용으로 구현하는 방식. 실제 세계를 모델링 하여 데이터와 절차를 하나의 덩어리(객체)로 묶어서 관리.
.
2. 객체지향 프로그래밍 특성
🔎 캡슐화
비슷한 역할을 하는 속성(필드)와 행위(메소드)들을 하나로 묶고 접근 지정자(public, private, protected)를 통해 제어하는 방식. 외부에서 보여질 필요가 없는 데이터를 숨길 수 있고 원하는 기능만 제공 가능.
class Person {
// private로 name과 age에 대한 직접 접근 방지
private name: string
private age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
// public Method를 통해 은닉화된 데이터에 접근(getter, setter)
public getName(): string {
return this.name
}
public setName(name: string): void {
this.name = name
}
public getAge(): number {
return this.age
}
public setAge(age: number): void {
this.age = age
}
}
.
🔎 추상화
모델화 하는 것으로 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념. 공통된 속성이나 기능을 묶어 이름을 붙이는 것
interface PersonInterface {
name: string
age: number
getName(): string
setName(name: string): void
getAge(): number
setAge(age: number): void
}
.
🔎 상속
하위 클래스에 상위클래스의 기능을 물려주는 것으로 코드를 재활용하여 생산성을 높일 수 있고 유지보수에 용이하다.
class Animal {
private name: string;
public getName(): string {
return this.name
}
public setName(name: string): void {
this.name = name
}
public cry(): void {
console.log('울음소리')
}
}
class Cat extends Animal {
cry(): void {
console.log('야옹')
}
}
// Animal 클래스를 상속받아 name, getName, setName, cry 를 사용가능
const cat = new Cat()
cat.setName('나비')
console.log(cat.getName()) // 나비
cat.cry() // 야옹
.
🔎 다형성
같은 모양의 함수가 상황에 따라 다르게 동작하는 것을 의미하며 대표적으로 오버로딩과 오버라이딩이 있다.
- 오버로딩 : 같은 함수명에 파라미터 갯수나 타입을 달리하여 다르게 동작하도록 하는 것.
- 오버라이딩 : 하위 클래스에서 상위 클래스의 메소드를 똑같은 이름으로 재정의 하여 사용하는 것
// 오버라이딩
class Animal {
public cry(): void {
console.log('울음소리')
}
}
class Cat extends Animal {
cry(): void {
console.log('야옹')
}
}
const animal = new Animal()
animal.cry() // 울음소리
const cat = new Cat()
cat.cry() // 야옹
// 오버로딩
class Animal {
private name: string
public setName(name: string): void
public setName(name: number): void
setName(name: string | number) : void {
this.name = typeof name === 'string' ? name : 'Animal' + name.toString()
}
}
.
참조
https://coding-lks.tistory.com/173
728x90
반응형