[Java] 클래스 선언 및 생성자
- -
1. 클래스 선언
1) 클래스 선언의 개념
객체를 생성하기 위한 템플릿 또는 설계도 역할을 합니다.
클래스는 속성(attribute)과 메서드(method)로 구성되어 있으며, 객체의 상태와 동작을 정의하는데 사용됩니다.
2) 클래스 선언의 형식
[접근 제어자] class 클래스이름 [extends 부모클래스] [implements 인터페이스] {
// 멤버 변수 (속성)
// 생성자 (Constructor)
// 메서드 (동작)
// 중첩 클래스 (Nested Class)
}
public class Animal {
// Animal 동물이라는 클래스 선언
private String name;
private int age;
// 멤버 변수 (속성)
// 이름과 나이라는 변수를 가짐.
public Animal(String name, int age) {
this.name = name;
this.age = age;
} // 생성자 (Constructor)
// 생성자를 통해 이름과 나이를 초기화
public void eat(String food) {
System.out.println(name + " is eating " + food);
} // 메서드 (동작)
public void sleep() {
System.out.println(name + " is sleeping");
} // 메서드 (동작)
}
2. 생성자
1) 생성자의 개념
클래스 선언 시 생성자(constructor)는 객체의 초기화를 담당하는 특별한 메서드
new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당함.
모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있습니다.
2) 기본 생성자
기본생성자는 매개변수를 가지지 않는 생성자로, 클래스 내에서 명시적으로 선언하지 않았을 경우 자동으로 생성됨.
[public] 클래스() { }
<소스 파일>
public class Animal {
}
<바이트 코드 파일>
public class Animal {
public Animal() { } // Animal()라고하는 기본 생성자가 자동 생성됨
}
Animal myAnimal = new Animal();
기본 생성자
3) 생성자 선언
생성자는 메소드와 비슷한 모양을 가지고 있으나, 리턴 타입이 없고 클래스 이름과 동일합니다.
클래스 (매개변수선언, ··· ) {
// 객체의 초기화 코드
}
(매개 변수는 new 연산자로 생성자를 호출 할 때 외부의 값을 생성자 블록 내부로 전달하는 역할)
<예시>
public class Animal {
Animal(String name, int age) { ··· } // 생성자
}
public class Animal {
Animal(String name, int age) {
}
}
public class AnimalExample
public static void main(String[] args) {
Animal myAnimal = new Animal("Dog", 6);
//Animal myAnimal = new Animal(); 인 기본생성자는 호출할 수 없음
}
}
4) 필드 초기화
클래스의 필드(멤버 변수)에 처음 값을 할당하는 과정을 말합니다.
클래스의 인스턴스(객체)를 생성할 때 필드에 기본값 또는 특정한 값을 할당하여 사용 가능 상태로 만드는 역할을 합니다.
① 필드초기화 방법 : 명시적 초기화
<예시>
public class Animal {
private String name = "Unknown";
private int age = 0;
}
name 필드는 "Unknown"으로 초기화되고, age 필드는 0으로 초기화됩니다.
② 필드초기화 방법 : 생성자를 통한 초기화
public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
}
Animal 클래스는 name과 age 필드를 매개변수로 받는 생성자를 가지고 있습니다.
이 생성자를 통해 인스턴스를 생성할 때, 전달된 값으로 필드가 초기화됩니다.
③ 필드초기화 방법 : 생성자를 통한 초기화
초기화 블록은 인스턴스가 생성될 때마다 실행되며, 생성자보다 먼저 실행됩니다.
public class Animal {
private String name;
private int age;
// 인스턴스 초기화 블록
{
name = "Unknown";
age = 0;
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
}
Animal 클래스는 인스턴스 초기화 블록을 가지고 있습니다.
이 초기화 블록은 인스턴스가 생성될 때마다 실행되어 name과 age 필드를 초기화합니다.
생성자가 호출되기 전에 실행되므로, 초기화 블록에 의해 할당된 값은 생성자에서 변경될 수 있습니다.
5) 생성자 오버로딩
동일한 이름의 생성자를 여러 개 정의하여 매개변수의 개수, 타입, 순서 등을 다르게 함으로써
다양한 생성자를 제공하는 것을 말합니다.
public class Animal {
private String name;
private int age;
// 매개변수 없는 생성자
public Animal() {
this.name = "Unknown";
this.age = 0;
}
// 이름만을 받는 생성자
public Animal(String name) {
this.name = name;
this.age = 0;
}
// 이름과 나이를 받는 생성자
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// Getter와 Setter 메서드 생략
// ...
}
● 매개변수 없는 생성자
이 생성자는 기본적으로 필드를 "Unknown"과 0으로 초기화합니다.
● 이름만을 받는 생성자
이 생성자는 인스턴스를 생성할 때 이름만을 전달받아 필드의 name을 초기화하고,
age는 0으로 초기화합니다.
● 이름과 나이를 받는 생성자
이 생성자는 인스턴스를 생성할 때 이름과 나이를 전달받아 각각 필드의 name과 age를 초기화합니다.
Animal animal1 = new Animal(); // 매개변수 없는 생성자 사용
Animal animal2 = new Animal("Lion"); // 이름만을 받는 생성자 사용
Animal animal3 = new Animal("Tiger", 5); // 이름과 나이를 받는 생성자 사용
6) 다른 생성자 호출 this()
생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있습니다.
이 경우 필드 초기화 내용은 하나의 생성자에만 집중적으로 하고,
나머지는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있습니다.
이 때 사용하는 것이 바로 'this()' 코드 입니다.
클래스( [매개변수, ···] ) {
this(매개변수, ···,값, ···);
// 클래스의 다른 생성자 호출
실행문;
}
this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫줄에서만 허용됨.
this()의 매개값은 호출되는 생성자의 매개 변수에 맞게 제공해야함.
public class Animal {
String name;
String color;
int age;
// 필드
Animal() {
}
// 생성자
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", age=" + age +
'}';
}
Animal(String name) {
this(name, "노랑", 3);
}
Animal(String name, String color) {
this(name, color, 3);
}
Animal(String name, String color, int age) {
this.name = name;
this.color = color;
this.age = age;
// 공통실행코드
}
}
public class AnimalExample {
public static void main(String[] args) {
Animal animal1 = new Animal();
System.out.println(animal1);
Animal animal2 = new Animal("Cat");
System.out.println(animal2);
Animal animal3 = new Animal("Cat", "빨강");
System.out.println(animal3);
Animal animal4 = new Animal("Cat", "빨강", 5);
System.out.println(animal4);
}
}
◎ 출력값 ◎
Animal{name='null', color='null', age=0}
Animal{name='Cat', color='노랑', age=3}
Animal{name='Cat', color='빨강', age=3}
Animal{name='Cat', color='빨강', age=5}
2023.06.19 - [Java] - 변수 타입 변환
'Java' 카테고리의 다른 글
[Java] List 리스트의 개념과 종류 (0) | 2023.07.03 |
---|---|
[Java] 객체 지향 프로그래밍 (0) | 2023.06.20 |
[Java] 변수 타입 변환 (0) | 2023.06.19 |
[Java] 변수 선언과 접근제한 (0) | 2023.06.17 |
[Java] 변수의 개념과 타입 (1) | 2023.06.16 |
소중한 공감 감사합니다