자바는 대표적인 객체지향 프로그래밍 언어이다.
객체지향 프로그래밍(OOP : Object Oriented Programming)
- 프로그램에 필요한 객체를 파악해 만들고 이를 조립해서 프로그램을 만드는 것을 말한다.
- 객체지향 프로그래밍은 객체 간 독립적이기 때문에 부분 수정이 용이하다. -> 유지보수 비용이 적게 든다.
* 객체
- 물리적인 것(사람, 나무, 자동차)과 개념적인 것(주문, 결제) 중에서 다른 것과 식별이 되는 것
- 자바에서 객체는 필드와 메소드를 가진다.
순차적으로 처리되는 것을 중요시하고 프로그램 전체가 유기적으로 이어지도록 만드는 절차적 프로그래밍과 주로 비교한다. (서로 반대되는 개념은 아니다.)
객체 지향 프로그래밍(OOP : Object Oriented Programming) | 절차적 프로그래밍(PP : Procedure Programming) | |
방식 | 데이터를 중심으로 함수로 만들어 프로그래밍 | 데이터와 기능을 하나의 객체로 생각, 객체들을 사용해 프로그래밍 |
장점 | 1. 코드 재사용이 용이함 2. 유지보수가 쉬움 3. 디버깅이 쉬움 |
컴퓨터의 처리 구조와 유사 -> 실행속도 빠름 |
단점 | 1. 처리속도가 비교적 느림 2. 설계시 많은 시간이 소요됨 |
유지보수 어려움 (하나가 문제 생기면 전체를 고쳐야함, 순서가 정해져 있어 코드의 순서가 바뀌면 결과에 문제 생길 수 있음) |
예시 | JAVA, Python,C#, C++ 등 | C언어 |
이렇게 정리하면 객체 지향 프로그래밍의 장점이 많지만 프로그래밍을 할 때 절차적 프로그래밍도 사용된다.
객체 지향 프로그래밍은 어떤 모듈에 있는 하나의 기능만 필요하다해도 그 모듈을 전부 가져와야 하기 때문에 프로그램의 사이즈가 불필요하게 커질 수 있다. 또한 그만큼 처리 속도도 느려질 수 있다. 이런 점이 중요시 될 때는 절차적 프로그래밍이 사용된다.
객체지향 프로그래밍 특징
- 추상화
- 공통되는 부분을 따로 모아두는 것을 말한다.
- ex) 강아지, 고양이, 호랑이를 각각의 객체라 할 때, 공통된 특징인 사족보행을 한다 등을 찾고 이를 동물이라는 클래스로 묶어두는 것을 말한다.
- 캡슐화
- 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것을 말한다. (= 객체의 필드(데이터)와 메소드를 하나로 묶고 실제 구현 내용은 외부로부터 감춘다.)
- 은닉화라고도 한다.
- 외부의 잘못된 사용으로 객체가 손상되지 않게 하기 위해 사용한다.
- 자바에서는 캡슐화된 멤버의 노출은 접근 제어자를 통해 결정한다. (public, private, protected, defalut)
- 상속
- 상위 개념의 특징을 하위 개념이 물려받는 것을 말한다.
- 예를 들어 동물은 생물의 속성을 물려받고 있는데, 동물의 속하는 사람은 동물과 생물의 속성을 모두 물려받고 있다.
- 부모 객체의 필드와 메소드를 자식이 추가로 작성하지 않고 사용할 수 있기 때문에 코드의 재사용이 용이하다.
- 부모 객체의 필드와 메소드를 수정하면 자동으로 자식에서도 수정되기 때문에 유지보수 시간이 줄어든다.
- 다형성
- 사용 방법은 동일하나(같은 이름의 메소드 호출) 실행 결과가 다르게 동작하는 것을 말한다.
- 부모 클래스의 동작을 자식 클래스 내에서 오버라이딩 되어 사용되는 것을 말한다.
- ex) 강아지, 고양이, 호랑이는 모두 소리를 낸다. 하지만 어떤 동물이냐에 따라 소리가 달라진다. 메소드를 소리내다로 생각하면 결과인 소리는 동물마다 달라진다.
'JAVA' 카테고리의 다른 글
[JAVA(자바)] 가변길이 매개변수(가변 인자) (0) | 2023.01.12 |
---|---|
[JAVA(자바)] 객체와 클래스(필드, 생성자(this와 this()), 메소드) (2) | 2023.01.12 |
[JAVA(자바)] String, StringBuffer, StringBuilder 차이 (0) | 2023.01.06 |
[JAVA(자바)] 열거 타입이란? (0) | 2023.01.05 |
[JAVA(자바)] 배열(Array) 타입이란? (feat. 길이, for each문, 다차원 배열) (0) | 2023.01.05 |
댓글