희락코딩

JavaScript _개념정리/객체지향 프로그래밍 이론 #1/2 본문

프로그래밍/자바스크립트 개념 정리

JavaScript _개념정리/객체지향 프로그래밍 이론 #1/2

Hello JoyCoding 2021. 5. 11. 01:54
728x90
반응형

# 들어가기 앞서...

공부를 하다보면 객체지향프로그래밍이란 말을 들어본적이 있습니다. 너무 생소하고 어려운 내용이여서 기피 했는데 원리와 개념만 잘파악하면 충분히 할만한 공부인 것 같습니다! 이번 블로깅은 객체지향 프로그래밍에 대해 간단하게 개념정리를 하였습니다.


객체지향 핵심 개념 (Object Oriented Programming)

객체지향? 객체를 지향한다는 말이 다소 난해하고 이해하기 힘든 경우가 있습니다. 그래서 정말 간단하게 핵심만 요약하자면 객체지향 프로그래밍은 객체 데이터의 접근과, 데이터 처리 과정에 대한 관심을 주로 삼는 프로그래밍 방법론이라고 이해 하면 되겠습니다!

 

 

객체지향 언어는 "클래스" 라고 부르는 데이터 모델의 청사진을 사용해 코드를 작성합니다. 또한 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있습니다! 하지만 자바스크립트는 객체 지향 언어가 아닌 프로토 타입 지향 언어입니다. 다만 객체 지향 프로그래밍을 할 수 있고 클레스 ES6문법을 사용하면 됩니다.

 


객체지향 프로그래밍 특징

객체지향 프로그래밍은 모든 것이 "객체"로 그룹화가 되어 있습니다. 또한 불필요한 코드를 줄여 직관적이며 재사용성이 가능하여 데이터 관리에도 매우 용이 합니다. 

 

객체지향 프로그래밍을 직관적으로 사용 하려면 클래스와 인스턴스, 생성자함수에 대한 개념을 알아야 합니다. (ES6 class문법) 이 방법은 다음편에서 예시와 함께 정리!

 

그렇다면 객체지향 프로그래밍의 주요 특징은 무엇이 있을까요 ? 

추상화(Abstraction), 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism) 크게 4가지가 있습니다. 


추상화 (abstraction)

추상화는 특정 대상을 관찰하여 핵심적이고 특징적인 공통점을 뽑아 내는 과정을 말합니다. 아래 사진을 보면 이해하기 쉽습니다. 피카소의 소를 자세히 관찰하면 핵심적인 특징만 남겨 두고 단순한 선 몇 개로 황소를 표현한 사실을 알 수 있습니다. 

 

황소 (피카소) 1945

 

비유를 하자면 핵심적인 특징만 가져와 내가 구현하고자 하는 프로그램 즉 인터페이스를 단순화 시킬 수 있습니다. 다른 중요한 특징이 있어도 핵심특징만 있다면 프로그램을 구현하기에 문제가 없다라는 뜻입니다.

 

이렇게 줄이고 줄여 공통적인 특징들만 뽑으면 데이터(속성)와 기능(메서드)으로 나뉘는데 이것들을 묶어 놓은 것을 캡슐화 라고 합니다. 이를 연관지어 하나로 묶는 개념적인 주체가 바로 클래스(class)입니다.

 


캡슐화 (encapsulation)

캡슐화는 위에 언급했듯이 데이터(속성)와 기능(메서드)들을 관련있는 것 끼리 묶는 것을 의미합니다. 그래서 하나의 객체 안에 넣어서 묶기 때문에 데이터(속성)과 기능(메소드)들이 느슨하게 결합이 됩니다.

느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합 하는 것을 의미합니다.

 

캡슐화 개념에는 "은닉화"의 특징도 포함합니다. 은닉화는 내부 데이터나 내부 구현이 외부로 노출되지 않도록 만드는 것입니다.

 

정리를 하자면 캡슐화는!!!

1. 데이터와 기능을 하나의 단위로 묶는것 입니다.

2. 은닉은 구현은 숨기고, 동작은 노출시킵니다.

3. 느슨한 결합에 유리해 언제든 구현을 수정할 수 있습니다.

 


상속 (inheritance)

상속은 객체지향의 핵심 기능 중 하나입니다. 상속은 부모 클래스의 모든 특징들을 자식 클래스가 물려 받는 것을 말합니다. 풀어서 비유하자면 아들 유전자 클래스가 아버지의 유전자 클래스를 상속 받게 되면 아버지의 유전자 즉 데이터(속성)와 기능(메서드)을 모두 물려 받게 됩니다. 이때 아버지와 아들은 상속 관계에 있으며 부모 클래스자식클래스라고 부릅니다.

 

상속 비유

 

부모 클래스로 부터 특징들을 물려 받게 이미 구현된 세부 내용들을 다시 구현할 필요가 없기 때문에 코드의 재사용성이 용의하다 라는 특징이 있습니다.

 


다형성 (polymorphism)

다형성은 하나의 속성이나 행위가 상황에 따라 다른 의미로 해석 될 수 있는 특징을 말합니다.

또한 다형성은 객체지향 프로그래밍에 있어 아주 핵심되는 중요한 개념 중 하나입니다.

 

 

 

 

다형성은 위에 설명한 상속을 이용해서 상위 클래스의 메소드를 하위 클래스에서 재정의 하여 사용 할 수 있습니다. 즉 부모 클래스의 참조 변수가 어떠한 자식 클래스의 인스턴스를 참조하느냐에 따라 동작이 달라 집니다.

 

이로서 다향성은 상속과 재정의를 통해 효과적으로 기능을 구현할수 있으며 로직에 따른 수정, 요구사항도 클래스를 추가하여 효율적으로 관리를 할 수 있습니다. 또 한 직관적인 가독성으로 보기 좋고 실수를 줄일 수 있습니다.

 

이것이 객체지향 프로그래밍을 하는 이유입니다.

 

 

참고자료 

https://poiemaweb.com/js-object-oriented-programming

 

Object-Oriented Programming | PoiemaWeb

오늘날 많은 유명한 프로그래밍 언어(Java, C++, C#, Python, PHP, Ruby, Object-C)는 객체지향 프로그래밍을 지원한다.

poiemaweb.com

https://skolakoda.github.io/nasledjivanje-klasa

 

Škola koda | Nasleđivanje klasa

Deo zbornika Uvod u softversko inženjerstvo Nasleđivanje klasa Nasleđivanje je jedan od suštinskih koncepata objektno-orijentisanog programiranja i od presudnog je uticaja na način na koji projektujete i pišete sopstvene klase. Nasleđivanje predstav

skolakoda.github.io

객체지향 다형성 및 이미지 자료 출처

https://debugdaldal.tistory.com/152

 

[JavaScript] 자바스크립트 객체지향 프로그래밍 - 다형성

※ 다형성이란? 다형성은 특정 기능을 선언(설계)부분과 구현(동작)부분으로 분리한 후 구현부분을 다양한 방법으로 만들어 선택하여 사용할 수 있게 하는 기능이다. 몇가지의 예를 들어보자 도

debugdaldal.tistory.com

 

728x90
반응형
Comments