JAVA DAY16 - 객체지향 프로그래밍 Ⅰ - 3 생성자

어뮤즈온·2020년 12월 3일
0

초급자바

목록 보기
23/31
//들어가기 전에 초기화의 예
public class VariableInit {
	
    //명시적 초기화
    int var = 10;
    static int staticVar = 20;
    
    //초기화 블럭
    //초기화하는데 로직이 필요할 경우 한줄이 아닌 여러줄이 필요한 경우 사용
    {
    	var = 30;
    }
    
    static{
    	staticVar = 40;
    }

}

생성자

  • 클래스와 같은 이름의 메서드
  • 인스턴스 변수*를 초기화하기 위해 사용한다.
  • 클래스에 생성자는 반드시 하나 이상 존재해야 한다.
  • 직접 선언해주지 않으면 컴파일러가 기본 생성자를 만들어준다.
  • 생성자는 리턴타입이 없다.

** 인스턴스 변수 : static이 붙지 않은 변수

public class VariableInit {
	
	VariableInit(){ //생성자
    	var = 50;
//      static = 60; //생성자에서 초기화 X
	}	  	
  
}
  • 값을 공유해야 하는 static 클래스 변수가 객체 생성 시 마다 계속 초기화되기 때문에 클래스 변수를 생성자에서 초기화하는 것은 좋지 않다.
    ** 값을 유지해야 하는데 계속 값이 변한다.

생성자 사용 이유

  • 초기화에 여러줄의 코드가 필요할 때
  • 초기화에 파라미터가 필요할 때

오버로딩

같은 이름의 메서드를 여러개 정의하는 것

class Init{
	int a;
    int b;
    int c;
    
    Init(int a, int b, int c){
    	this.a = a;
        this.b = b;
        this.c = c;
        // 인스턴스 변수와 지역변수 구분
    }
    
    Init(){
//    	a = 10;
//      b = 20;
//      c = 30;
        this(10, 20, 30);
        //다른 생성자를 호출
    }
}

this, this()

  • 인스턴스 변수와 지역변수의 이름이 같을 때 둘을 구분하기 위해 사용
  • 생성자에서 다른 생성자를 호출할 때 사용 -> 중복되는 코드 제거
  • this는 맨 첫줄에서만 사용해야 하며, this 위에 코드가 있어서는 안된다.
public static void main(String[] args){
	Init i = new Init();
    	i.a = 10;
    	i.b = 20;
    	i.c = 30;
    
    	Init i3 = new Init(70, 80, 90)
}

예제

public class ClassMaker {
	//인스턴스변수 하나를 선언하고 명시적으로 초기화 해주세요.
    int Var = 1;
    
    //위에서 선언한 인스턴스변수를 초기화 블럭을 사용해 초기화 해주세요.
    {
    	Var = 10;
    }
    
    //위에서 선언한 인스턴스변수를 생성자의 파라미터를 사용해 초기화 해주세요.
    ClassMaker(int var){
    	this.Var = var;
    }
    
    //위에서 선언한 인스턴스변수를 생성자를 하나 더 만들어서 초기화 해주세요.
    ClassMaker(){
    	this(50);
    }
    
    //초기화 순서 : 명시적 초기화->초기화 블럭->생성자(코드의 위치는 상관 X)
}
profile
Hello, world!

0개의 댓글