IT 개발

[Java] 객체(Object) 란?

썬프로 2021. 12. 18. 22:27
반응형

객체란?

객체란 여러분들이 생활하시면서 보는 사물을 다 객체라고 보실 수 있습니다.

자동차로 예를 들어봅시다.

- 사물 : 자동차
- 속성, 특징 : 검은색, 바퀴 4개
- 행위, 동작 : 달린다, 멈춘다

이렇게 자동차라는 것을 정의하고 설계하기 위해서는 위와 같이 사물 + 속성 + 행위로 정의를 내릴 수 있습니다.

여기서 개발자 관점으로 조금만 바꿔보면

- 객체(사물) : 자동차
- 필드(속성, 특징) : 검은색, 바퀴 4개
- 메서드(동작, 행위) : 달린다, 멈춘다

즉, 개발관점에서 객체지향 프로그래밍을 한다는 말은 객체,필드,메서드 등으로 하나의 사물을 설계하고, 설계된 사물들간의 유기적인 관계를 프로그래밍 방식으로 풀어내는 것을 말합니다.

 

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

과거에는 계산기를 여러개 이어붙인 방식의 개발을 진행했습니다.

이렇게 순차적인 흐름의 방식대로 개발을 하는 방식을 '절차지향 프로그래밍' 이라고 합니다.

하지만 점차 사람들이 단순한 거 이외에도, 일상속의 여러 복잡한 업무들을 개발을 통해 편하게 사용하기를 원하게 되었고, 이런 것들이 하나 둘 쌓이다 보니 기존의 절차 지향형(순차 지향형) 방식의 프로그래밍 방식으로는 원하는 시스템을 만드는데 한계가 왔습니다.

이런 비효율적인 방식에서 벗어나, 객체지향 개발이라는 것이 사회적으로 대두되기 시작하였고, 점차 객체지향 관점으로 탄생한 여러 프로그래밍 언어들이 등장하기 시작하였습니다.

그 중 JAVA는 Class설계 기반의 객체 지향 프로그래밍(OOP : Object Oriented Programming) 의 꽃을 피운 언어라고 할 수 있습니다.

 

객체의 4가지 특성

1. 캡슐화

캡슐화는 말 그대로 어떤 내용들을 감싼다. 이렇게 생각해주시는 것이 가장 쉽습니다.

그럼 도대체 객체지향에서 어떤 게 캡슐화된다는 이야기일까요?

자동차가 달리기 위해서, 각종 엔진들이 동작하고 연료가 필요하고 수많은 과정들이 존재합니다. 그런데 이런 것들을 하나하나 다 알고 조정하는 게 아니겠죠? 우리는 자동차 엑셀 패들만 밟는 건데 이런 것들이 동작하게 됩니다.

이렇듯 우리가 알지 못하는 또는 알아서는 안 되는 것들을 조작하기 위해서는, 그것을 감싸고 있는 또는 대표하는 것을 컨트롤하게 됨으로써 원하는 행위를 할 수 있게 됩니다.

이렇게 캡슐화는 우리가 직접적으로 다루어서는 안 되는 것들을 보호하기 위해서 나타난 개념입니다. 이렇게 캡슐화를 취함으로써 얻을 수 있는 장점이 있어요.

* 실제 메서드가 어떻게 동작하는지 외부에서는 할 필요가 없으며(자동차 굴러가는 원리를 알 필요는 없으며), 단순하게 메소드 호출만 함(자동차 엑셀 패들을 밟음으로써)으로써 기능을 실행할 수 있고, 이를 통해 객체지향 설계가 가능하다.
* 객체 내에서 속성과 메서드는 모두 캡슐화의 형태로 제공되며, 프로그램의 수정이 일어날 경우 단일 객체에만 영향을 끼치므로 재사용성이 높아진다. 절 자치 향의 경우 하나가 수정되면 그것을 사용하는 모든 곳에서 동일한 수정이 일어나므로 재사용성이 떨어진다.

2. 상속

상속은 말 그대로 부모의 특징을 자식이 물려받는 것을 말합니다. 대신 물려받을 것을 그대로 사용할 수 도 있지만, 점차 진화하듯이 구체화시켜 사용할 수 도 있습니다.

상속은 다음과 같은 장점이 있습니다.

* 부모의 특징만을 보고도, 자식의 특징을 유추할 수 있게 됩니다.
* 부모에 특징이 정의돼있다 보니, 자식에서는 별도로 정의해주지 않더라도 부모의 특징 사용이 가능합니다.(재사용성)
* 부모의 특징을 가진 일관된 자식들이 생성되기 때문에, 간단하게 프로그램의 확장이 가능합니다.(확장성)
* 객체마다 특징을 코딩해주지 않아도 되고, 같은 특징을 가졌더라면 상속을 통해서 쉽게 사용이 가능합니다.


3. 다형성

다형성은 하나의 개체가 여러 개의 형태로 변화하는 것을 의미합니다.

예를 들어 "자동차가 달린다"라는 것을 정의해 두었다면, 이것을

"오토바이가 달린다, 트럭이 달린다, 승용차가 달린다"

이런 식으로 변형시켜 사용할 수 있는 것을 말합니다.

우리는 "자동차가 달린다"라고 사용하지만, 각각의 특징을 가지는 다양한 객체들이 "달린다"라는 각각의 특징에 맞게 행위를 할 수 있게끔 하는 것이 바로 객체가 가진 다형성 특징입니다.


4. 추상화

추상화는 객체지향에서 모델링 과정이라고 보시면 됩니다.

각각의 객체들 중에서 공통적인 부분, 특정 특성을 분리해서 재조합하는 부분을 추상화라고 합니다.

앞에서 언급한 다형성, 상속 같은 과정들이 모두 추상화에 포함됩니다.

반응형

'IT 개발' 카테고리의 다른 글

[Java] 날짜, 시간 함수 알아보기 - Date, Calendar  (0) 2023.01.11
[Spring] 트랜잭션 AOP 기능 정리  (0) 2023.01.07
[Spring] logback, 로그백  (0) 2022.07.29
[Web] API 란?  (0) 2021.12.26
[WEB] 웹(Web) 이란?  (0) 2021.12.21