1. 객체 지향 프로그래밍(OOP, Object Oriented Programming)
- 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것이다. 여기서 객체는 클래스라는 틀에서 생겨난 instance를 의미한다.
- 캡슐화와 격리 구조로 인해 절차적 프로그래밍에 비해 실행 속도가 느리고, 객체 지향 프로그래밍에서는 모든 것을 객체로 생각하기 때문에 필요한 메모리 양이 증가하는 성질이 있다.
- 많은 기능을 제공하는 경우에 적합하다. 각 객체의 역할이 많아도, 많은 역할을 하나의 객체로 묶을 수 있기 때문이다.
- 특징
특징 | 설명 | 예시 |
추상화(abstraction) | - 객체들의 공통적인 특징을 도출하여 모델화하는 것을 의미한다. - 각 개체의 구체적인 개념에 의존하지 않고 추상적인 개념에 의존해야 이후 설계를 유연하게 변경할 수 있다. |
|
캡슐화(encapsulation) | - 필요한 데이터나 메서드 등 관련 요소들을 객체와 그릅화시켜 캡슐 내부와 외부를 구별하는 것을 의미한다. - 캡슐화된 객체의 세부 구현 사항은 정보 은닉되어 외부에 은폐되기 때문에 보안에 좋다. - 변경이 발생해도 오류의 파급효과가 적다. - 캡슐화된 객체들은 재사용이 가능하기 때문에 생산성이 향상된다. |
|
상속(inheritance) | - 이미 정의된 부모 클래스의 모든 속성과 연산을 자식 클래스가 물려 받는 것을 의미한다. - 자식 클래스는 부모 클래스의 모든 속성과 연산을 다시 정의하지 않고도 자신의 속성으로 사용할 수 있다. |
|
다형성(polymorphism) | - 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 것을 의미한다. - 동일항 명령의 해석을 연결된 객체에 의존하는 것을 뜻한다. |
- 오버라이딩(Overriding): 부모 클래스의 메서드와 같은 이름을 사용하며 매개변수도 같은 내부 소스를 재정의하는 것이다. - 오버로딩(Overloading): 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하여 사용하는 것을 의미한다. |
2. 절차적 프로그래밍(PP, Procedural Programming)
- 단순히 순차적인 명령을 수행하는 것이 아닌 프로시저를 이용한 프로그래밍이다. 절차를 따라서 하는 프로그래밍으로 많이 알려져 있지만, 사실 프로시저를 이용한다는 것을 의미한다. 절차를 따르지 않는 프로그래밍은 없다. 이것이 절차 지향 프로그래밍이 아닌 절차적 프로그래밍이라고 불리는 이유이다.
- 작은 기능을 제공하는 경우에 적합하다. 작은 기능을 객채 별로 나누면 오히려 복잡할 수 있기 때문이다.
- 객체나 클래스를 만들 필요 없이 바로 프로그래밍을 할 수 있으며, 그 흐름 또한 쉽게 추적이 가능하다.
- 각 코드가 매우 유기적이기 때문에 수정 및 기능 추가가 어렵다.
- 오류가 발생했을 경우 파악이 어렵다.
3. 절차적 프로그래밍은 객체 지향 프로그래밍의 반대 개념이 아니다.
- 언어를 구분 짓는 기준이 아닌 프로그래밍 접근 방법 및 패러다임을 의미한다. 데이터를 중심으로 함수를 만들어 사용하는 절차적 프로그래밍 혹은 데이터와 기능들을 하나의 객체로 묶어 사용하는 객체 지향 프로그래밍 등의 개념들이 이에 해당된다.
참고
- https://yongbba.tistory.com/18
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=atalanta16&logNo=220249264429
- https://gmlwjd9405.github.io/2018/07/05/oop-features.html
- http://www.incodom.kr/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5
'Java' 카테고리의 다른 글
BufferedReader, BufferedWriter (0) | 2021.12.02 |
---|---|
Abstract Class, Interface 차이점 (0) | 2021.11.25 |
JAR, WAR, EAR 차이점 (0) | 2021.11.11 |
HashTable, HashMap, ConcurrentHashMap 차이점 (0) | 2021.10.08 |
SOLID 원칙 (0) | 2021.10.06 |