객체지향 프로그래밍이란?
객체지향 프로그래밍(Object-Oriented Programming)이란 프로그램을 설계하는 개념이자 방법론.
프로그램 = 현실세계
객체 = 사물
객체지향 프로그래밍(OOP)은 프로그램을 유연하고 변경하기 쉽게 만든다. 따라서, 재사용성이 용이하여 대규모 프로젝트에서 많이 사용되는 방법론이다. 프로그램 개발과 유지보수가 용이하다는 점이 가장 큰 장점으로 꼽힌다.
객체지향 vs 절차지향
비교의 용이성을 위해 표로 장단점을 비교했지만, 두 개념은 반대되는 개념이 아니다
비교 | 객체지향 언어 | 절차지향 언어 |
장점 | - 코드 재사용성이 용이하다 - 개발(코딩)이 간단하다 - 유지보수가 쉽다 - 대규모 프로젝트에 적합하다 |
- 처리속도가 빠르다 - 초기 프로그래밍 언어로 컴퓨터의 처리구조와 비슷해 실행속도가 빠르다 |
단점 |
- 유지보수가 어렵다
- 대규모 프로젝트에 부적합하다
- 프로그램 분석이 어렵다
|
- 처리속도가 느리다 - 객체에 따른 용량증가 - 설계단계에 시간이 많이 소요된다 |
OOP를 위한 4가지 기둥
상속(Inheritance)
- 이미 구현된 클래스(Super Class, 상위클래스)를 기반으로 새로운 클래스(Sub Class, 하위클래스)를 확장하는 것을 의미한다.
- 부모 클래스의 특성을 자식 클래스가 물려받음으로써 코드의 재사용성과 유지보수성을 높일 수 있다.
- 서로 상속 관계에 있다고 하며, 하위 클래스는 상위 클래스가 가진 모든 기능과 속성을 상속받는다.
- 중복 제거를 목적으로, 공통된 부분을 상위클래스로 작성한 뒤 차이점만 하위클래스를 이용해 기능 부여하는 편이 효율적이다.
- 단일 상속(single inheritance)만을 허용한다.
- 인터페이스(interface)라는 문법 요소를 통해 다중 상속과 비슷한 효과를 낼 수 있는 방법이 존재한다.
캡슐화(Encapsulation)
- 데이터와 그 데이터를 다루는 코드를 하나로 묶어 은닉하는 것을 의미한다.
- 특정 객체 내 속성/기능을 캡슐화하여, 데이터를 외부로부터 보호한다.
- 데이터 변경 시 다른 객체에 영향을 주지 않는다.
- 독립성 확보가 가능하다.
- 유지보수 및 코드 확장 시 오류 범위를 최소화할 수 있다.
다형성(Polymorphism)
- 같은 이름의 변수, 메서드 등이 다양한 형태로 동작할 수 있다.
- 오버로딩과 오버라이딩의 기법으로 구현된다.
- 많은 중복코드를 줄이고, 편리하게 코드작성이 가능하다.
추상화(Abstraction)
- 각각 다른 복잡한 세부 내용을 생략하고, 공통된 핵심적인 기능과 특성에만 집중한다.
- 기존 클래스들의 공통된 기능을 추출해 상위 클래스로 만들어 낸다.
- 이러한 점에서 상속과는 반대된다.
- 인터페이스와 추상 클래스 등의 기법으로 구현된다.
- 상속계층도의 상층부에 위치할수록 기능은 추상적이며, 아래로 내려갈수록 구체적이다.
- abstract 제어자를 통해 구현된다.
- 가장 핵심적인 개념은 '미완성'에 있다.
- 추상클래스는 상속 관계에서 새로운 클래스 작성에 매우 유용하다.
- 추상화의 가장 핵심 역할은 인터페이스(Interface)이다.
'JAVA' 카테고리의 다른 글
[JAVA] 예외처리 (0) | 2023.07.14 |
---|---|
[JAVA] 제네릭 (0) | 2023.07.14 |
[JAVA] Enum(열거형) (0) | 2023.07.14 |
[JAVA] 사용자로부터 데이터 입력받기 (1) Scanner (0) | 2023.07.13 |
[JAVA] 연산자 (0) | 2023.07.13 |