[참고] Oracle > Java Documentation > What is an Object?
[참고] 위키백과 - 객체 (컴퓨터 과학)
[참고] [객체지향] 상태, 행동, 식별자 - 개발의 꽃 - 티스토리
[참고] 객체 정리 | ChoDragon9
[참고] Object-Oriented Programming Concepts - Velog
운영체제(OS) : Windows 10 64bit
JDK8 기준 내용임.
Oracle 원문을 네이버 파파고 번역기를 통해 해석한 거라 내용이 이상할 수 있음.
객체란
-
객체의 행동의 결과는 상태에 영향을 받고, 객체는 유일하게 식별이 가능하다.
-
한 객체에서 상태가 다르면 같은 행동이라도 행동의 결과는 달라지지만 여전히 식별 가능한 객체이다.
-
ex) 앨리스의 키는 현재 상태에 따라 매우 커질수도 있고, 매우 작아질 수도 있으나, 앨리스는 여전히 앨리스이다.
-
실제 객체의 상태와 동작을 식별해야 객체 지향 프로그래밍 측면에서 생각하기 쉽다.
-
상태
-
상태를 알면 행동의 결과를 쉽게 예측할 수 있다.
-
객체의 상태는 정적인 프로퍼티(변하지 않는 상태), 동적인 프로퍼티(시간에 따라 변하는 상태)로 구성된다.
-
객체의 프로퍼티
-
객체를 구성하는 단순한 값인 속성과 객체와 객체를 연결하는 링크의 조합을 말한다.
-
-
객체는 스스로의 행동에 의해서만 상태가 변경된다.
-
즉, 외부의 객체 메시지를 통해 객체 스스로가 메시지를 참고하여 상태를 변경하는 것이다.
-
행동
-
객체의 상태를 변경하는 것은 객체의 자발적인 행동뿐이다(메시지를 받아 상태가 변경되는 것도 결국 객체의 자발적인 행동에 의해 변경되는 것이다).
-
행동과 상태
-
행동과 상태의 조합으로 행동을 우아하게 표현할 수 있다.
-
현재 행동의 결과를 확인할 때, 과거의 행동을 돌아볼 필요 없이 상태를 이용하면 결과를 쉽게 확인할 수 있다.
-
ex) 앨리스의 키가 40cm이면 문을 통과할 수 있다.
-
-
협력과 행동
-
객체의 행동은 두 가지 관점에서 살펴볼 수 있다.
-
첫 번째로, 객체 자신의 상태 변경. 두 번째로, 협력하는 다른 객체에 대한 메시지 전송.
-
-
상태 캡슐화
-
메시지 송신자는 메시지 수신자의 상태 변경에 대해서는 전혀 알지 못한다. 그저 그러기를 바라고 전달할 뿐이다.
-
상태를 외부에 노출시키지 않고 행동을 통해 캡슐화하는 것이다(객체의 자율성을 높인 것이다).
-
자율적인 객체는 스스로 판단하고 스스로 결정하기 때문에 자율성이 높아지고 객체의 지능도 높아진다.
-
객체의 지능이 높아진다는 것은, 협력하는 과정이 유연하고 간결해진다는 결과를 도출한다. 즉, 이것이 상태 캡슐화의 이유이다.
-
식별자
-
객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정 프로퍼티가 객체 안에 존재하다는 것이다.
-
객체와 값의 가장 큰 차이는 값은 식별자를 가지지 않지만, 객체는 식별자를 가진다는 점이다.
-
값과 객체
-
값(Integer, String)의 경우 불변 상태이므로 두 인스턴스의 상태가 같으면 두 인스턴스는 동등하다고 본다.
-
객체의 경우 시간에 따라 변경되는 가변 상태이므로 타입이 같은 두 객체의 상태가 같더라도 동등하다고 볼 수 없고, 상태가 다른데도 동일한 객체라고 볼 수 있다.
-
Ex. 이름이 같고, 나이가 같은 두 사람이 함께 있더라도 둘은 명백히 다른 사람이다.
-
Ex. 10년 전의 나와 10년 후의 나는 상태가 다르지만 결국 동일한 사람이다.
-
-
-
여기에서 말하는 것은, 상태를 기반으로 객체의 동일성을 판단할 수 없다는 것이다. 즉, 객체는 식별자에 의해서만 동일성을 검사할 수 있는 것이다.
행동이 상태를 결정한다.
-
상태를 먼저 결정하고 행동을 결정하는 것은 설계에 나쁜 영향이 끼친다.
-
그 이유를 살펴보자
-
첫 번째, 상태를 먼저 결정할 시 캡슐화가 저해된다.(상태가 외부에 노출하는 상황)
-
두 번째, 객체가 협력자가 아닌 고립된 섬이 된다.
-
세 번째, 재사용성이 저하된다.(협력을 하지 못하므로)
-
객체지향 세계와 현실 세계
-
객체지향 세계는 현실 세계를 추상화한 것이 아니라, 새로운 세계를 가지고 있되, 현실보다 더 많은 특징과 능력을 보유한 객체가 존재하는 것이다.
-
현실세계는 주가 사람이 되어 사람의 행동에 따라 객체들의 상태가 결정되는데, 객체지향 세계에서는 모두가 주체가 되어 스스로 자신의 상태를 결정한다.
소프트웨어 객체
-
소프트웨어 객체는 상태 및 관련 동작으로 구성되기에 개념적으로 실제 객체와 유사하다.
-
객체는 필드(일부 프로그래밍 언어의 변수)에 상태를 저장하고 메서드(일부 프로그래밍 언어의 함수)를 통해 동작을 표시한다.
-
메서드는 객체의 내부 상태에서 작동하고 객체 대 객체 통신을 위한 기본 메커니즘 역할을 합니다.
-
내부 상태를 숨기고 모든 상호 작용이 객체의 방법을 통해 수행되도록 요구하는 것을 데이터 캡슐화라고 한다. 이는 객체 지향 프로그래밍의 기본 원리이다.
객체 지향이 제공하는 이점
-
모듈화(Modularity)
-
객체의 소스 코드는 다른 개체의 소스 코드와 독립적으로 쓰고 유지할 수 있다.
-
일단 생성되면 시스템 내에서 객체를 쉽게 전달(유연성)할 수 있다.
-
-
정보 은닉(Information-hiding)
-
가장 기본적인 특징이며 정보 은닉의 대표적인 예가 데이터 캡슐화라고 할 수 있다.
-
객체의 메서드와 상호작용함으로써(메서드를 통해 외부와 통신), 내부 구현의 세부사항은 외부로부터 숨겨져 있다(정보 은닉).
-
-
코드 재사용(Code re-use)
-
다른 소프트웨어 개발자가 작성한 객체가 이미 있는 경우 해당 객체를 프로그램에서 사용할 수 있다(재사용성).
-
이를 통해 전문가는 복잡한 작업별 객체를 구현/테스트/디버그 할 수 있으며, 이 객체를 신뢰할 수 있는 사용자 고유의 코드로 실행할 수 있다.
-
-
플러그인 및 디버깅 용이성(Pluggability and debugging ease)
-
플러그인(Pluggability)은 마음대로 뺐다 꼽았다 하며 대체될 수 있다는 뜻이고 하나의 모듈로서 다른 것과 맞물리지 않기 때문에 디버깅이 쉽다(debugging ease).
-
특정 객체에 문제가 있는 것이 확인되면 응용 프로그램에서 해당 개체를 제거하고 다른 개체를 대체하여 연결할 수 있다.
-
ex) 볼트가 파손되면 기계 전체가 아닌 볼트만 교체.
-
'IT 개발 > JAVA' 카테고리의 다른 글
변수(Variables) - 기본 자료형(Primitive Data Type) (0) | 2021.01.12 |
---|---|
변수(Variables) (0) | 2021.01.11 |
객체 지향 프로그래밍 개념 - 클래스(Class) (0) | 2021.01.10 |