[TIL] 코드스테이츠 SEB BE Day 11
💡 Today I Will Learn
- 생성자
✏️ Summary
생성자
인스턴스가 생성될 때 호출되는 초기화 메서드이다.
인스턴스 생성은new
키워드이며, 인생성자는 인스턴스 변수를 초기화하는 메서드이다.클래스명(매개변수){ ... }
생성자의 기본구조는 위와 같으며, 몇가지 규칙이 있다.
- 클래스 이름과 생성자의 이름이 같다.
- 반환타입(return type)이 없다.
- Overloading(오버로딩)이 가능하므로 여러개의 생성자를 가질 수 있다.
따라서 메서드 시그니처에 따라 다양하게 여러개의 생성자를 사용할 수 있다.
기본생성자(default Constructor) vs 매개변수가 있는 생성자
기본생성자
생성자를 따로 생성하지 않는다면 컴파일러가 내부적으로 기본 생성자를 추가한다.클래스명(){ }
매개변수가 있는 생성자
매개변수를 입력받아 인스턴스를 초기화하여 사용한다. 인스턴스마다 다른 특성을 이용할 수 있으니 유용하다.clss Test{ int v1; String v2; public Test(int v1){ this.v1 = v1; } public Test(String v2){ this.v2 = v2; } public Test(int v1, String v2){ this.v1 = v1; this.v2 = v2; } }
this() vs this
this()
클래스내 생성자끼리 상호 호출이 가능하다.
this() 메서드는 속한 클래스 내에 다른 생성자를 호출하는 경우에 사용된다. 다만 두가지 규칙이 있다.class Test{ public Test(){ System.out.println("first"); } public Test(int v){ this(); System.out.println("second"); } } /* first * first * second */
- 반드시 생성자의 내부에서만 사용할 수 있다.
- 생성자의 첫 줄에 위치해야 한다.
this
인스턴스 변수와 생성자의 매개변수 이름이 같으면 구분하기 어려워진다.
따라서 이를 구분하기 위해this
키워드를 사용한다.clss Test{ int v1; String v2; public Test(int v1, String v2){ this.v1 = v1; this.v2 = v2; } }
this
키워드가 적용되면 인스턴스변수를, 없는 것은 지역변수를 의미한다.초기화 블록
멤버변수(클래스, 인스턴스)는 초기화하지 않아도 자동으로 초기화되지만, 적절하게 초기화하는 것이 더 좋다.
- 명시적 초기화
- 생성자 초기화
- 초기화 블록을 이용한 초기화
1,2는 앞에서 다루었던 내용이므로 생략하고, 3의 내용을 다루도록 한다.
인스턴스 초기화 블록
인스턴스가 생성될 때마다 실행되며, 생성자보다 우선적으로 처리가 된다.
Class Test{ int a; int b; String c; { this.c = "Test"; this.a = 3; } }
’{}’ 중괄호를 이용해 정의한다.
생성자를 이용한 초기화를 많이 사용하지만, 생성자가 많아 공통적으로 초기화시켜야할 변수가 있다면 코드중복을 줄일 수 있다.클래스 초기화 블록
위와 다르게 클래스가 처음에 메모리에 로딩될 때 한번 수행된다.
Class Test{ static int a; int b; String c; static{ this.a = 3; } }
위의 초기화 방법들로 할 수 없는 클래스 변수를 초기화할 때 사용된다.
📌 정리
클래스, 메서드, 생성자까지 손에 가장 익어야할 기초 부분을 오늘까지 다 다뤘다.
이전 유닛과 비교해서 정리시간이 많이 할당되어 있다. OOP 기초인만큼 블로깅, 노트 등을 하며 기초를 탄탄히 다지라는 의도로 생각된다. 이에 맞게 OOP 파트가 끝나고 블로그 새로운 카테고리에 포스팅을 준비해야겠다😀
🎯 Tomorrow
- 상속
- 캡슐화
Back to [TIL] 코드스테이츠 SEB BE Day 10