개요
이 글에서는 객체 지향 프로그래밍에서 생성자와 생성자 오버로딩에 대해 알아보겠습니다. 생성자는 클래스의 인스턴스 변수를 초기화하는 특수한 메서드이며, 생성자 오버로딩은 인자에 따라 다른 생성자를 호출하여 인스턴스의 초기화를 가능하게 합니다. 이번 글에서는 생성자와 생성자 오버로딩의 개념을 자세히 살펴보고, 실제 코드 상에서 어떻게 활용되는지 알아보겠습니다.
생성자
생성자는 클래스의 인스턴스 변수를 초기화하는 특수한 메서드입니다. 모든 클래스는 생성자를 가지고 있어야 하며, 생성자가 없을 때에도 오류가 나지 않는 이유는 컴파일러가 컴파일하는 과정에서 기본 생성자를 만들어주기 때문입니다.
IntelliJ IDE에서는 alt + insert (Windows), command + n (macOS) 를 누르면 생성자를 쉽게 추가할 수 있습니다.
다음은 생성자를 이용한 클래스 예제입니다.
public class Example {
public static void main (String[] args) {
Cat cat1 = new Cat("코리", 2, "brown");
System.out.println(cat1.name);
System.out.println(cat1.age);
System.out.println(cat1.color);
}
class Cat{
String name;
int age;
int color;
public Animal(String name, int age, int color) {
this.name = name;
this.age = age;
this.color= color;
}
}
}
위 예제에서 Cat 클래스의 생성자는 name, age, color를 인자로 받아 초기화합니다. 생성자를 이용하여 인스턴스를 생성할 때 인자를 전달하여 초기화할 수 있습니다.
생성자 오버로딩
생성자 오버로딩은 인자에 따라 다른 생성자를 호출하여 인스턴스의 초기화를 가능하게 합니다. 생성자 오버로딩을 통해 필드값이 누락되었을 때 기본값을 지정할 수 있으며, 인스턴스화 할 때 기본적으로 행동해야 할 것들을 지정해 줄 수 있습니다.
다음은 생성자 오버로딩을 이용한 클래스 예제입니다.
public class Example {
public static void main (String[] args) {
Cat cat1 = new Cat("코리", 2, "brown");
Cat cat2 = new Cat();
System.out.println(cat1.name);
System.out.println(cat1.age);
System.out.println(cat1.color);
System.out.println(cat2.name);
System.out.println(cat2.age);
System.out.println(cat2.color);
}
class Cat{
String name;
int age;
int color;
public Cat() {
this("고양이", 1, "black"); // <- 기본값으로 들어감
}
public Cat(String name, int age, String color) {
this.name = name;
this.age = age;
this.color= color;
}
}
}
위 예제에서 Cat 클래스는 두 개의 생성자를 가지고 있습니다. 첫 번째 생성자는 인자를 전달하지 않을 때 기본값으로 초기화하고, 두 번째 생성자는 name, age, color를 인자로 전달하여 초기화합니다. 이처럼 생성자 오버로딩을 이용하면 인스턴스의 초기화를 다양하게 가능합니다.
this와 this()의 차이
this는 새롭게 만들어질 인스턴스의 참조값을 가지고 있습니다. this()는 클래스 안에 있는 또 다른 생성자를 호출하는 것이며, 생성자가 여러개 있을 때 인자로 전달되는 타입과 갯수를 확인해서 알아서 일치하는 생성자를 찾습니다. this()는 맨 첫줄에 위치해야 합니다.
결론
이번 글에서는 생성자와 생성자 오버로딩에 대해 알아보았습니다. 생성자는 클래스의 인스턴스 변수를 초기화하는 특수한 메서드이며, 생성자 오버로딩은 인자에 따라 다른 생성자를 호출하여 인스턴스의 초기화를 가능하게 합니다. 이를 통해 객체 지향 프로그래밍에서 클래스의 초기화를 보다 유연하게 가능케 합니다.
오늘의 한마디!
본격적으로 객체지향 프로그래밍에 들어가면서 이제 조금 어려워진 부분들이 많은데 딸이 요로감염으로 입원하게 되면서 여러모로 스케줄이 꼬이게되 공부랑 블로그도 어렵게 되었다 설상가상으로 아내까지 아프게 되면서 많은 시간을 육아에 쓰게 되었는데 다시 한번 패턴을 바로 잡야겠다는 생각이 든다. 이제 부터 어려워지는데 한번 놓치게 되니까 아직까지는 따라갈만한데 뭔가 한번 더 놓치면 버거워질 것 같다 앞으로 정보처리기사 준비하는 것도 그렇고 시간 배분을 잘해야겠다!
내일 할일 하루 투두리스트 만들고 그대로 하기
'개발일지' 카테고리의 다른 글
[TIL] Generic, List, Set, Map 에 대하여 (0) | 2023.03.15 |
---|---|
[KPT] Section 1을 마치며 하는 회고 feat. 코드스테이츠 백엔드 (0) | 2023.03.13 |
[TIL] JAVA 기초 - 반복문 (0) | 2023.02.22 |
[TIL] Java 기초 - If 조건문, 에러 해결 (0) | 2023.02.21 |
[TIL] Java 변수, 데이터 타입, 문자열 (0) | 2023.02.18 |