코이팅

객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 개념과 4가지 특징 본문

CS

객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 개념과 4가지 특징

코이팅 2023. 1. 5. 02:06
728x90
반응형

객체 지향 프로그래밍(OOP)

오늘날 많은 유명한 프로그래밍 언어(Java, C++, C#, Python, PHP, Ruby, Object-C)는 객체지향 프로그래밍을 지원합니다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있습니다. 객체 지향 프로그래밍은 프로그래밍에서필요한 데이터를 추상화시켜상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.

객체 지향 프로그래밍(OOP) 장단점?

👍🏻 장점

1. 재사용성
상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있습니다.

 

2. 생산성 향상
잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있습니다.

 

3. 자연적인 모델링
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있습니다.

 

4. 유지보수의 우수성
프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉬워서 매우 경제적이라고 할 수 있습니다.


👎🏻 단점

1. 개발속도가 느리다.
객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모 된다.

 

2. 실행속도가 느리다.

객체지향언어는 대체적으로 실행속도가 느리다.

 

3. 코딩난이도 상승
다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.

 

객체 지향 프로그래밍(OOP) 특징?

💡 객체 지향 프로그래밍은 크게 추상화 , 캡슐화 , 상속 , 다형성 의 네가지 특징을 가집니다.

 

1. 상속 (Inheritance)

  • 부모 클래스의 변수와 메서드를 자식 클래스가 전부 물려받는 것입니다. 

2. 캡슐화 (Encapsulation, Information Hiding)

  • 객체의 변수 및 메서드를 외부 객체가 함부로 건드리지 못하게 감싸는 개념입니다.
  • 클래스의 getter/setter 등을 통해 은닉합니다. 

이미지 출처 :  https://velog.io/@nayeon/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-OOPObject-Oriented-Programming

 

3) 다형성(Polymorphism)

  • Poly(다양한) + morphism(변형,변신) 의 합성어입니다. 
  • 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미합니다.
  • 자바에서는 한 레퍼런스 변수가 다른 형태의 객체를 참조할 수 있음을 말합니다. 
  • 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅 등의 방법이 있습니다.

4) 추상화 (Abstraction) 

  • 자바에서 공통의 속성, 기능을 묶어 이름을 붙이는 것을 의미합니다. 
  • 자바에서 추상화는 추상클래스, 인터페이스를 통해 구현됩니다. 
추상클래스 추상메서드를 하나 이상 포함한 추상 클래스 
인터페이스 추상메서드만을 포함한 추상 클래스, 다중 상속 가능 

* JAVA 8부터는 인터페이스 안에 default 선언을 하면 바디가 있는 메서드도 선언이 가능합니다. 

이미지 출처 :  https://velog.io/@nayeon/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-OOPObject-Oriented-Programming

자동차라는 추상화 집합을 만들어두고 자동차들이 가진 공통적인 특징들을 만들어서 활용합니다.

 

728x90
반응형

'CS' 카테고리의 다른 글

JWT(Json Web Token)란?  (0) 2023.01.14
Spring Security란  (0) 2023.01.14
컴퓨터의 구성  (0) 2023.01.05
DNS란?  (0) 2022.07.27
서버(Server)란?  (0) 2022.07.27
Comments