[[ 클래스 ]]
객체 VS 클래스
객체지향 프로그래밍 언어인 Java의 핵심 개념 중 하나는 바로 클래스와 객체이다. 두 용어는 혼용해서 많이 사용되지만 정확하게는 아래와 같은 차이가 있다.
| 비유 | 설명 | |
| 객체(object) | 설계도를 기반으로 만들어진 존재 | 클래스에서 만들어진 존재 |
| 클래스(class) | 설계도 | 객체를 만들기 위한 정의 |
객체 구조
객체를 만들 때에는 new라는 키워드를 사용하며, 객체를 만드는 과정을 인스턴스화라고 표현한다.
클래스명 변수명 = new 클래스명();
클래스 구조
class 클래스명 {
// 1. 속성
int value;
// 2. 생성자
// 기본 생성자(클래스명() {})가 자동으로 들어있음
public 클래스명(int value) {
this.value = value;
}
// 3. 기능
public void function() {
System.out.println("value: " + value);
}
// 4. 게터 (값을 가져올 때 사용)
public String getValue() {
return value;
}
// 5. 세터 (값을 수정할 때 사용)
public void setValue(int value) {
this.value = value;
}
}
1) 속성
- 객체가 가지고 있는 데이터를 말한다.
- 속성들은 변수로 표현하며 프로퍼티, 필드라고도 한다.
- 사람의 속성을 예로 들면 나이, 이름, 주소 등이 해당된다.
2) 생성자
- 객체를 어떻게 만들지 정의해 두는 것으로 객체를 만들 때 사용된다.
- 반환 자료형이 없다.
- 클래스명과 이름이 똑같다.
- 여러 개 존재할 수 있다.
3) 기능(메서드)
- 객체가 할 수 있는 동작이나 행동을 정의한 것이다.
- 기능은 메서드로 표현된다.
4) 게터(gettter)
- 게터(getter) 란 클래스의 속성을 가져올 때 사용되는 기능을 의미한다.
5) 세터(setter)
- 세터(Settter) 란 객체의 속성을 외부에서 설정할 수 있게 해주는 기능을 의미한다.
[[ 래퍼클래스 ]]
래퍼클래스란?
래퍼클래스는 기본자료형을 객체로 감싸는 클래스를 말한다.
| 기본 자료형 (Primitive Type) | 래퍼 클래스 (Wrapper Class) |
| byte | Byte |
| short | Short |
| int | Int |
| long | Long |
| float | Float |
| double | Double |
| char | Char |
| boolean | Boolean |
※ 래퍼클래스를 왜 사용할까?
- 기본형은 단순한 값만 가질 수 있다.
- 그러나 래퍼 클래스는 기능(메서드) 제공할 수 있다.
- 따라서 기본형을 감싸서 객체로 만든 래퍼클래스를 이용하면 편리하게 데이터를 처리할 수 있다.
참조형(Reference Type)
참조형 변수는 실제 값을 저장하고 있지 않고, 데이터가 저장된 메모리 주소를 가리키고 있다.
변수에 객체를 담는다고 해도 객체 자체가 아닌, 객체의 위치(주소)를 변수에 저장하게 된다. 따라서 아래의 경우 personA도 참조형 변수이다.
Person personA = new Person("Steve"); // 참조형 변수 personA
System.out.println(personA.name); // 출력: Steve
System.out.println(personA); // 출력: (객체 주소 Person@123)
오토박싱(Auto-boxing)과 오토언박싱(Auto-unboxing)
1) 오토박싱: 기본형 → 래퍼형으로 변환
Integer num3 = 10;
// Integer는 참조형 객체 이지만 기본형 int 값을 직접 넣을 수 있다.
// 내부적으로 Integer num = Integer.valueOf(10);가 자동 처리
2) 오토언박싱: 래퍼형 → 기본형으로 변환
Integer numInt = 10;
int num = numInt;
// 기본형 int에 Integer 참조형 변수를 직접 넣을 수 있다.
// 내부적으로 int a = num.intValue(); 자동 처리
[[ static ]]
인스턴스란?
- 객체를 만들 때마다 생성되는 변수와 메서드이다.
- 각 객체가 개별적으로 값을 가진다. (공유되지 않음)
- 객체(인스턴스)를 생성한 후에만 사용할 수 있다.
staic이란?
- static 키워드는 모든 객체가 함께 사용하는 변수나 메서드를 만들 때 사용된다. (모든 객체가 같은 값을 공유)
- 객체(인스턴스)를 만들지 않아도 클래스 이름만으로 바로 사용할 수 있다.
- static 변수와 메서드는 한 번만 생성되고 Method Area(메서드영역)에 저장된다.
※ Static 주의사항
인스턴스 멤버를 사용하기 위해서는 먼저 생성되어야 한다. 따라서 객체 생성 없이 Static 메서드에서는 인스턴스변수에 접근할 수 없다.
public class Example1 {
int value;
public static void staticMethod() {
System.out.println(this.value); // 오류 발생
}
}
public class Example2 {
int instanceVal = 10;
public static void main(String[] args) {
Example2 ex = new Example2();
System.out.println(ex.instanceVal); // 정상 출력
}
}
[[ final ]]
불변객체
- 불변객체는 내부 상태를 변경할 수 없는 객체를 뜻한다. (String , Integer , 래퍼클래스 등)
- 내부 속성에 final 사용 : 한 번 값이 설정되면 바뀌지 않음
- 세터 메서드 없음 : 외부에서 값을 바꿀 수 없게 설계함
- 값을 바꾸고 싶을 때에는 새로운 객체를 만들어서 사용
public final class Circle {
final static double PI = 3.14159;
final double radius; // final로 선언해서 값이 변경되지 않음
Circle(double radius) {
this.radius = radius; //반지름이 다른 원을 위해서는 새로운 객체 생성
}
}'Java' 카테고리의 다른 글
| [Java] 객체지향 - 캡슐화 / 상속 / 추상화 / 다형성 (0) | 2025.04.17 |
|---|---|
| [Java] 인터페이스 (0) | 2025.04.16 |
| [Java] 조건문 / 반복문 / 배열 / 메서드 (0) | 2025.04.15 |
| [Java] 변수 / 입출력 / 연산 (0) | 2025.04.14 |
| [Java] Java에 대하여 (0) | 2025.04.14 |