일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 회고
- 운영체제
- REST_API
- 프로토타입
- web
- 자료구조
- 백준
- 자바스크립트
- mysemester
- Til
- 생활코딩
- UI
- 큐
- 코드스테이츠
- superstarjypnation
- CSS
- 30daysdowoonchallenge
- Next.js
- 카카오
- React
- html
- javascript
- UX
- redux
- 스택
- useState
- 해시테이블
- level1
- vercel
- 프로그래머스
- Today
- Total
데굴데굴
<JavaScript> 객체 지향 프로그래밍 본문
객체 지향 프로그래밍 (Object Oriented Programming, OOP)
초기의 C와 포트란 같은 언어는 절차적 언어이다.
절차적 언어는 순차적인 명령의 조합으로 작성된다.
절차 지향 관점에서는 프로그램을 명령어 또는 함수의 목록으로 본다. (딥다이브 260페이지)
객체 지향은 사람이 세계를 보고 이해하는 방법을 흉내낸 방법론이다.
현실 세계의 사물들은 각각의 속성과 기능을 가지고 있으며, 이는 각 사물을 구분하는 단서가 된다.
객체 지향 관점에서는 프로그램을 객체의 집합으로 표현하며, 클래스에 데이터와 기능을 한 곳에 묶어서 처리한다.
객체 지향 언어에는 Java, C++, C# 등이 있다.
자바스크립트는 객체 지향 언어는 아니지만, 객체 지향 패턴으로 작성이 가능하다.
객체 지향에는 네 가지 기본 개념이 존재한다.
- Encapsulation (캡슐화)
- Inheritance (상속)
- Abstraction (추상화)
- Polymorphism (다형성)
캡슐화 Encapsulation
데이터와 기능을 하나의 단위로 묶는 것.
사용자에게 구현은 숨기고 동작만을 노출시킨다.
이런 은닉화를 통해 데이터를 보호할 수 있다는 장점도 있다.
느슨한 결합 loose coupling
-> 실행 순서에 따라 쓰지 않고 실제 모습과 비슷하게 코드를 모아서 결합한다.
-> 코드만 보고도 객체의 기능을 상상할 수 있도록 작성한다.
속성과 메소드를 모두 한 클래스에 작성하는 것이 그 예이다.
상속 Inheritance
부모 클래스의 속성을 자식 클래스가 물려받는다.
(부모 클래스는 base class, 자식 클래스는 derived class라고 하는 것이 더 일반적이다.)
예를 들어, employee 클래스를 만들고 싶다고 가정해보겠다.
employee 클래스에는 이름, 나이, 성별, 직업, 월급 등이 들어갈 수 있다.
하지만 인간의 기본적인 속성을 담은 human 클래스가 미리 정의되어 있다면 이를 일일이 작성해줄 필요가 없어진다.
employee 클래스는 human 클래스를 상속받아 job, salary 속성과 출퇴근 메소드만 추가해주면 된다. (어디까지나 러프한 예시이다)
이렇게 상속을 이용하면 공통되는 코드를 줄일 수 있어 유지보수에 훨씬 유리해진다.
추상화 Abstraction
추상화는 복잡한 내부 코드를 숨기고 단순하게 보이도록 하는 개념이다.
함수를 사용하는 것도 일종의 추상화에 해당한다.
복잡한 로직은 함수에 두고 필요할 때만 호출해오면 되기 때문이다.
추상화를 이용하면 사용자에게 불필요한 기능을 노출시키지 않아 예기치 못한 변화가 발생하는 것을 막을 수 있다.
다형성 Polymorphism
같은 이름을 가진 메서드라도 인스턴스 객체의 특성에 따라 다르게 작동한다.
만약 다형성이 없다면 인스턴스의 종류에 따라 if/else문으로 동작을 전부 나눠놓아야 한다는 불편함이 생길 것이다.
'Programming > JavaScript' 카테고리의 다른 글
<JavaScript> 프로토타입 체인 (0) | 2022.09.22 |
---|---|
<JavaScript> 프로토타입 (0) | 2022.09.21 |
<JavaScript> 클래스와 인스턴스 (0) | 2022.09.21 |
<JavaScript> JavaScript Koans (0) | 2022.09.08 |
<JavaScript> 원시 자료형과 참조 자료형 (0) | 2022.09.06 |