코딩 이래요래
Java의 클래스와 객체 본문
📌 1. 필드(Field), 생성자(Constructor), 메소드(Method)
1-1. 인스턴스 변수와 클래스 변수
🔸 1) 필드(Field)
- 객체의 상태나 데이터를 나타내는 변수를 필드라고 함.
- 클래스 내부에 선언된 멤버 변수.
예시
class Person {
String name; int age;
}
- name과 age는 객체가 가지게 될 상태(속성)를 나타내는 필드임.
🔸 2) 인스턴스 변수 vs 클래스 변수
구분 | 정의 | 특징 |
인스턴스 변수 (Instance Variable) |
객체가 생성될 때마다 별도로 생성 | 객체별로 독립적인 값을 가짐 |
클래스 변수 (Class Variable, static) |
클래스가 메모리에 로드될 때 딱 한 번만 생성 | 모든 객체가 공유하는 변수 |
예시
class Test {
int number1; // 인스턴스 변수
static int number2; // 클래스 변수
}
🔹 각 변수의 생성 및 소멸 시기
변수 | 생성 시기 | 소멸 시기 |
인스턴스 변수 | 객체(인스턴스) 생성 시 | 객체가 참조되지 않아 가비지컬렉터(GC)에 의해 메모리에서 제거될 때 |
클래스 변수 | 클래스 로드시 (프로그램 시작 시) | 프로그램 종료 시 |
지역 변수 | 메소드 호출 시 | 메소드 종료 시 |
1-2. 생성자 패턴 (Constructor Patterns)
🔸 1) 기본 생성자
- 파라미터가 없는 생성자.
- 생성자를 작성하지 않으면 컴파일러가 자동으로 생성해줌.
- 단, 하나라도 생성자를 작성하면 자동으로 기본 생성자를 만들어 주지 않음.
예시
class DefaultConstructor {
DefaultConstructor() {
System.out.println("기본 생성자 호출");
}
}
🔸 2) 오버로딩된 생성자
- 매개변수의 타입이나 개수를 다르게 하여 여러 개 생성 가능.
- 객체를 생성할 때 다양한 초기값을 줄 수 있음.
예시
class Person {
String name;
int age;
Person() { }
Person(String name) {
this.name = name;
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
🔸 3) this() : 다른 생성자 호출
- 클래스 내에서 다른 생성자를 호출할 때 사용.
예시
class Constructor {
int test;
Constructor() {
this(1); // 같은 클래스 내 다른 생성자 호출
}
Constructor(int num) {
this.test = num;
}
}
🔸 4) super() : 부모 클래스의 생성자 호출
- 자식 클래스에서 부모 클래스의 생성자를 명시적으로 호출할 때 사용.
- 명시하지 않으면 자식 클래스 생성자에서 기본적으로 자동 호출됨.
예시
class Parent {
Parent() {
System.out.println("부모 클래스 생성자 호출");
}
}
class Child extends Parent {
Child() {
super(); // 생략 가능, 기본 생성자 자동 호출
System.out.println("자식 클래스 생성자 호출");
}
}
🔸 this, this(), super, super() 비교
키워드 | 역할 | 사용 위치 |
this | 현재 객체 자기 자신을 참조할 때 | 클래스 내 어느 위치에서나 가능 |
this() | 같은 클래스 내 다른 생성자 호출 | 생성자 내부 첫 줄에서만 호출 가능 |
super | 부모 객체를 참조할 때 | 클래스 내 어느 위치에서나 가능 |
super() | 부모 클래스 생성자 호출 | 생성자 내부 첫 줄에서만 호출 가능 |
1-3. 메소드 시그니처(Method Signature)와 오버로딩(Overloading)
🔸 1) 오버로딩(Overloading)
- 동일한 클래스 내에서 같은 이름의 메소드나 생성자를 여러 개 정의할 수 있게 해주는 기법.
- 매개변수의 타입, 개수, 순서 중 하나라도 다르면 다른 메소드로 인식함.
예시
class Calculator {
int sum(int a, int b) {
return a + b;
}
double sum(double a, double b) {
return a + b;
}
int sum(int a, int b, int c) {
return a + b + c;
}
}
🔸 2) 메소드 시그니처 구성요소
메소드 시그니처는 다음 요소들로 구성됨.
- 메소드 이름
- 매개변수의 개수, 타입, 순서
※ 리턴 타입은 메소드 시그니처에 포함되지 않음.
🔸 3) 매개변수로 사용 가능한 자료형
- 기본 자료형 (int, char, boolean 등)
- 참조 자료형 (String, 사용자 정의 클래스 등)
- 배열 (int[], String[] 등)
- 가변 인자(varargs) (int..., String...)
가변인자 예시
class VarargsTest {
void displayNumbers(int... nums) {
for (int num : nums) {
System.out.println(num);
}
}
}
// 사용법 new VarargsTest().displayNumbers(1, 2, 3, 4);
해당 게시글은 학습한 내용을 복습하며 정리한 글이므로 틀린 부분이 있을 수 있음.
'JAVA' 카테고리의 다른 글
자료구조 (0) | 2025.04.13 |
---|---|
SOLID 원칙 (0) | 2025.04.07 |
객체지향 프로그래밍(OOP)의 4가지 (0) | 2025.04.01 |
JVM의 메모리 구조 (0) | 2025.03.31 |
객체지향 프로그래밍 (0) | 2025.03.31 |