# 객체
- 자바에서의 데이터는 객체로서 취급된다.
- 실제로 존재하는 것, 형태가 있는 것, 개념과 논리 역시 객체의 범위에 포함된다.
소스 상에서는 클래스로 생성한 변수를 객체라고 부르며, 컴퓨터 구조적으로는 heap 영역의 메모리에 영역을 생성한다.
[참고] 객체와 변수의 생성 차이
종류 | 설명 |
기본자료형 | stack 영역에 데이터를 생성한다. |
객체 | heap 영역에 데이터가 생성되며 stack 영역에 해당 값의 주소를 두고 주소를 통해서 데이터를 찾는다. |

객체 생성 방식
(1) 암시적 객체 생성
- 기존에 생성된 값과 같은 데이터를 갖고자하는 객체간 주소를 공유하는 방식
- 객체를 ==로 비교하는 경우 주소 값을 비교하게 된다.

(2) 명시적 객체 생성
- New 키워드를 사용하여 생
- heap 영역에 변수의 메모리 영역을 할당받는다.
- 기존에 있는 같은 데이터와 상관없이 새로운 주소 값의 영역을 생성한다.

객체의 불변적 특성
- 한번 생성된 객체의 내용은 변하지 않는다.
- 객체의 값이 변경되는 경우 heap 영역에서는 기존의 값의 주소를 끊어버리고 수정된 객체 값을 새롭게 할당받은 뒤
- 새로운 값의 주소 값을 연결한다.

# 객체 지향 프로그램 (Object-Oriented Programming)
- 자바에서 모든 데이터는 객체로서 취급이 된다.
- 객체란 실제로 존재하는 것이며, 형태가 있는 책상이나 형태가 없는 개념이나 논리 역시 객체의 범주에 포함된다.
- 객체지향 프로그램은 조립식 프로그래밍이라고도 한다.
- 프로그램이 자전거 한대라고 가정한다면 바퀴, 몸체, 핸들등의 부품은 객체로 구성된다고 할 수 있다.
객체의 상태나 행동을 구체화하는 행위를 객체화(인스턴스화)라고하며
객체화 작업으로 개발하는 자바등의 프로그램을 객체지향 프로그램이라고 한다.
장단점
비고
|
장점
|
단점
|
객체지향 프로그램
|
# 코드 관리와 사용이 용이하다.
# 유지보수 및 관리가 쉽다.
# 팀단위로 진행하는 프로젝트에 적합하다.
|
# 많은 양의 객체로 용량이 크다.
# 객체 설계에서 고민할 내용이 많다.
|
객체의 특징
(1) 추상화 (Abstraction)
- 객체지향에서 추상화란, 객체에서 공통적인 속성을 파악하여 추출하는 것을 뜻한다.
- 관리와 사용이 용이해진다는 강점이 있다.
[예시] 객체의 추상화
자전거는 픽시, 산악 자전거, 유아 자전거등 다양한 종류가 존재한다.
만약 여러 타입의 자전거에 각각 브레이크를 추가한다면 수십가지의 같은 브레이크 기능을 만들어야한다.
추상화는 객체의 공통적인 특징을 파악하여 추상적인 개념을 잡아 공통적인 속성을 반복하여 생성할 필요가 없게 한다.
(2) 캡슐화 (Encapsulation)
- 연관있는 변수와 메소드를 묶어두는 기능을 뜻한다.
- 접근 제어자를 통해서 외부에서의 접근을 제한하고 객체 내에서만 접근이 가능하게 만든다.
- 이를 '정보 은닉'이라고 하며 외부에서의 침입으로부터 객체를 보호하며 응집도를 높여주게 한다.
접근제어자
|
설명
|
PUBLIC
|
같은 프로젝트 내의 모든 객체에 접근 허가 |
PRIVATE
|
현재 클래스내에서만 접근 허가 |
PROTECTED
|
상속 관계의 객체에서만 접근 허가 |
DEFAULT
|
접근 제한자에 아무 내용도 넣지 않은 경우 해당, 같은 패키지 내의 객체만 접근 허가 |
(3) 상속 (Inheritance)
- 부모 클래스에서 자식클래스로 특정 기능이나 속성을 상속받아 사용하는 것을 말한다.
- 프로그래밍에서는 같은 기능을 여러 클래스에서 반복 사용하는 경우가 있는데, 상속으로 반복되는 코드를 없애는 것이 가능하다.
(4) 다형성 (Polymorphism)
- 동일한 변수, 함수등이 각각 다른 방법으로 동작할 수 있는 특징을 뜻한다.
- 동일한 메소드를 사용하는 오버로딩과 메소드를 덮어쓰기하는 오버라이딩이 해당한다.
'Web > Java' 카테고리의 다른 글
[Java] 상속 (0) | 2025.01.09 |
---|---|
[Java] 클래스 (0) | 2025.01.09 |
[Java] Stack, Heap (0) | 2025.01.09 |
[Java] 컴파일 (0) | 2025.01.09 |
[Java] Project 생성 (0) | 2025.01.09 |