새소식

Java

[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()라고하는 기본 생성자가 자동 생성됨
}
◆ 따라서 클래스에 생성자를 선언하지 않아도 다음과 같이 new 연산자 뒤에 기본 생성자를 호출해서 객체를 생성할 수 있습니다.

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] - 변수 타입 변환

 

변수 타입 변환

1. 자동 타입 변환 1) 자동 타입 변환의 개념 자동 타입 변환(automatic type casting)은 암시적 타입 변환(implicit type casting)이라고도 불림. 크기가 작은 데이터 타입을 크기가 큰 데이터 타입으로 자동으

devwarriorjungi.tistory.com

 

'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
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.