프로그래밍 언어를 사람들이 이해하고/사용하기 쉽게 만들어진 것이 객체 지향 언어다(예: Javascript, Python, Java, C#, C++, PHP, 등). 이 전에는 절차 지향 프로그래밍 언어만(예: C, COBOL, HTML, VBscript, 등) 사용됐다.
객체 지향 프로그래밍은 프로그래밍 철학중 하나다. 필요한 각 데이터와 기능들을 객체들로 만들어서 서로 상호작용 하면서 데이터를 처리하는 프로그래밍 방법이다.
객체 지향 프로그래밍을 설명하는 네가지 컨셉 및 특성들이 있다 :
- Encapsulation 캡슐화
- Abstraction 추상화
- Inheritance 상속
- Polymorphism 다형성
이 컨셉들을 요약해서 객체 지향 프로그래밍의 장점은 :
- 복합성 감소
- 코드의 재활용성(reusability)이 증가한다
- 필요없는 중복된 코드를 제거한다
- 사용하기 편하게 분리한다
- 사람이 보기 좋게 만든다
즉, 유지보수가 쉽고 대형 프로젝트에 적합하다
단점 :
- 객체가 많아지면서 용량이 커지고 처리속도가 상대적으로 느려진다
- 설계 시 더 많은 노력이 필요하다
기본 구성 :
- 클래스 (Class) : 데이터를 추상화해서 같은 종류/그룹에 속성과 행위를 정의한 것이다. 이때 속성은 변수, 행위는 메소드를 말한다.
- 객체/인스턴스(instance) : 클래스에서 선언된 속성을 및 행위를 상속 받고 사용되는 데이터.
예) 동물 클래스에서 생성된 강아지 객체 또는 하위 클래스 :
class Animal {
constructor(mood, hunger, energy) {
this.mood = mood
this.hunger = hunger
this.energy = energy
}
eat() {
this.mood ++
this.hunger ++
}
sleep() {
this.hunger ++
this.energy ++
}
play() {
this.mood ++
this.energy --
}
};
let dog = new Animal(10, 10, 10);
dog.eat();
console.log(dog.mood);
console.log(dog.hunger);
dog.play();
console.log(dog.mood);
console.log(dog.hunger);
let cat = new Animal(8, 8, 8);
dog.eat();
console.log(dog.mood);
console.log(dog.hunger);
dog.play();
console.log(dog.mood);
console.log(dog.hunger);
강아지 : 동물 클래스의 하위 클래스 / 새로운 객체
기분, 배고픔, 에너지 : 속성/변수
먹기, 자기, 놀기 : 행위/메소드
Encapsulation (캡슐화)
- 캡슐화는 클래스의 생성이라고 생각하면된다. 데이터와 함수들을 하나의 객체 안에 모아서 묶는 것.
- 목적 : 클래스라는 캡슐에 필요한 속성과 기능을 분류하고 모아서 넣고 계속 재활용 하기 위해.
Abstraction (추상화)
- 추상화는 캡슐화의 자연스러운 연장선이다. 추상화를 위해 필요한 것만 캡슐화 하는 것이다.
- 목적 : 추상화 과정을 통해, 복잡하게 만든 객체를 더 쉽게 사용할 수 있다. 예) 스마트폰은 사용자가 이해하기 힘든 소프트웨어/하드웨어로 만들어졌지만 사용하기에는 쉽게 만들어졌다.
- 규모가 커지고 코드 베이스를 유지보수를 계속 하기 위해서는 추상화 과정이 꼭 필요하다.
Inheritance (상속)
- 상속은 상위클래스의 속성과 기능을 이어 받아 재사용 할 수 있게 하고, 새롭게 만들어진 해당 자식클래스의 기능을 수정 또는 새로운 기능을 추가 할 수 있게하는게 상속이다.
- 목적 : 코드의 중복을 없애기 위함. 중복 코드를 작성하는 것도 힘들지만 유지 보수에도 비용이 든다.
Polymorphism (다형성)
- 다형성은 각 자식클래스의 상황에 맞게 상속 받은 변수/함수 등이 다르게 정의되고 다른 결과가 나오는 것을 말한다.
- 목적 : 상속과 같은 이유로, 코드의 중복을 없애고 유지보수의 비용이 줄어든다.
- 동물이라는 상위클래스에서 자식클래스 강아지 와 고양이가 있으면. '울음' 이라는 속성은 강아지는 '멍멍'이 될 수 있고, 고양이는 '야옹'이 될 수 있다는 것이다.