생성자 (constructor, this, 오버로딩)
1. 생성자란?
객체를 생성할 때 init하는 것이다. 생성자는 오로지 클래스에서 객체를 생성(new)할 때만 사용된다. 몇가지 특징으로는 생성자의 이름은 클래스명과 동일하고, 리턴 타입이 없다.
2. 기본 생성자
생성자를 따로 정의하지 않고 클래스를 만들더라도, 객체는 만들어진다. 이것은 컴파일러가 default 생성자를 끼워넣었기 때문이다.
// Test.java
public class Test {
public static void main(String[] args) {
System.out.println("hello world");
}
}
// javap -c Test.class
C:\Users\sjh836\Desktop>javap Test.class
Compiled from "Test.java"
public class constructor.Test {
public constructor.Test();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #22 // String hello world
5: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
까보면 public constructor.Test(); 를 만들지도 않았는데 들어가 있는걸 볼 수 있다.
3. 사용자 정의 생성자
개발자가 생성자를 만들면, 컴파일러는 기본 생성자를 끼워넣지 않는다. 객체 생성 시 필수적인 데이터가 있도록 할 때 생성자를 선언한다.
this 키워드
현재 코드를 실행하는 현재 객체 자체를 가리킨다. 생성자 파라미터명과 필드명이 같을 때 가독성을 위해 this.필드 = 파라미터 로 써준다.
또 다른 쓰임새로는 생성자 안에서 this(파라미터, 40) 과 같은 다른 생성자를 호출할 수도 있다.
생성자 오버로딩
메소드와 마찬가지로 시그니처만 다르면 쓸 수 있다. (주로 파라미터로..)
출처: https://sjh836.tistory.com/123?category=679845 [빨간색코딩]
'JAVA > Java' 카테고리의 다른 글
enum (이전 방식, 개념, 동작방식, 사용예제, 관련메소드) (0) | 2021.03.19 |
---|---|
서블릿 (servlet, jsp와 차이점, 컨테이너, 동작원리, web.xml) (0) | 2021.03.19 |
static 키워드 (메모리 상 위치, 클래스 변수, 클래스 메소드, static 블록) (0) | 2021.03.19 |
접근제어자 (public, protected, private, getter, setter) (0) | 2021.03.19 |
예외처리 (throwable, exception, error, throws) (0) | 2021.03.19 |
Thread의 모든 것! (스레드 생성, 생명주기, 정보, 상태, 스케줄링, 주요 메소드, synchronized) (0) | 2021.03.19 |
Collections 프레임워크 (0) | 2021.03.19 |
JVM 아키텍처 (0) | 2021.03.19 |