생성자 (Constructor)

DONI·2021년 8월 18일
0

Java

목록 보기
29/46
post-thumbnail

🏹 생성자 (Constructor)

생성자는 일종의 메서드로, 전달된 초기값을 받아서 객체의 필드에 기록
객체 생성 + 필드 초기화 + 필요한 기능 수행   ⭐ public 원칙 !

  • 기본 생성자

    • 작성하지 않은 경우 클래스 사용 시 컴파일러가 자동으로 기본 생성자 생성
      기본 생성자는 클래스를 생성할 때 습관적으로 만들어주는 것이 좋다.
  • 매개변수 생성자 (코드 길이를 줄이기 위해서 사용)

    • 객체 생성 시 전달받은 값으로 객체를 초기화하기 위해 사용
    • 매개변수 생성자 작성 시 컴파일러가 기본 생성자를 자동으로 생성해주지 않음
    • 상속에서 사용 시 반드시 기본 생성자를 작성
    • 오버로딩을 이용하여 작성

  ⭐ 생성자의 선언은 메서드의 선언과 유사하나 반환값이 없으며,
       생성자명을 클래스명과 똑같이 지정해주어야 한다.


🏹 오버로딩 (Overloding)

한 클래스 내에 동일한 이름의 메서드를 매개변수만 다르게 하여
여러 개 정의하는 것 (파이썬에서는 지원하지 않음)
예) println() 메서드

  • 오버로딩 조건

    1. 메서드 이름이 같아야 한다.
    2. 매개변수의 개수, 타입, 순서 중 하나라도 달라야 한다. (⭐ 변수명 상관 없음)
    3. 접근제한자, 반환형은 같거나 달라도 된다.

    💥 주의 : 매개변수의 순서가 달라도 서로 다른 메서드로 인식한다!
    public void method(int intI, String strS) { }
    ≠ public void method(String strS, int intI) { }


🏹 this. 참조변수

모든 인스턴스의 메서드에 숨겨진 채 존재하는 레퍼런스로, 할당된 객체를 가리킴
인스턴스 변수와 지역 변수를 구분하기 위해 사용
함수 실행 시 전달되는 객체의 주소를 자동으로 받음

🏹 this( ) 생성자

생성자 내에서 같은 클래스의 다른 생성자를 호출할 때,
중복 제거를 통한 코드 길이 감소 효과를 위해서 사용
반드시 첫 번째 줄에 선언해야 한다 !


🚩 소스코드1 - 오버로딩 println( ) 메서드 (부분발췌)

package java.io;

import java.util.Formatter;
import java.util.Locale;
import java.nio.charset.Charset;
import java.nio.charset.IllegalCharsetNameException;
import java.nio.charset.UnsupportedCharsetException;

public class PrintStream extends FilterOutputStream
    implements Appendable, Closeable
{

    /* Methods that do terminate lines */

    public void println() {
        newLine();
    }

    public void println(boolean x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(char x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(int x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(long x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(float x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(double x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(char x[]) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }

}

🚩 소스코드2 - this( ) 생성자

package kh.oop1.day03.exam;
public class ThisConstructor {
	private String bookName;        // 책이름
	private int bookprice;          // 책가격
	private String bookpublisher;   // 출판사
	private int bookid;             // 책아이디
	
	public ThisConstructor() {}
	
	public ThisConstructor(String bookpublisher) {
		this.bookpublisher = bookpublisher;
	}
	
	public ThisConstructor(String bookName, int bookprice, int bookid) {
		this("DONICODE");
		this.bookName = bookName;
		this.bookprice = bookprice;
		this.bookid = bookid;
	}

}
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글