728x90

 

 

생성자(constructor)

메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드

 

new연산자가 heap 메모리에서 생성한 공간에 값을 초기화하는 역할을 하고 나서

생성자가 객체의 필드 초기화시키는 역할

public class Academy { private int studentNo; private String name;
    // 기본 생성자 
    public Academy() {} 

    //매개변수 있는 생성자
    public Academy(int studentNo, String name) {
        this.studentNo = studentNo; 
        this.name = name;
    } 
}
[접근제한자] [예약어] class 클래스명 {
	[접근제한자] 클래스명() { }
	[접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; } 
}

 

 

종류

매개변수 있느냐 없느냐가 기준

 

1)기본 생성자(default constructor)

매개변수가 없는 생성자

작성하지 않은 경우, 클래스 사용 시 JVM이 자동으로 기본 생성자 생성

 

2)매개변수 생성자

매개변수가 있는 생성자

 

1)매개변수를 통해 전달받은 값으로 필드 초기화

    - 매개변수가 있기에 매개변수를 통해서 값을 받을 수 있다

    - 매개변수를 통해 필드 초기화한다는 의미는 값을 넣는다는 의미를 포함한다

2)기본 생성자를 만들어두지 않고 매개변수가 있는 생성자만 만들었을 경우 기본생성자는 자동으로 생성되지 않음

      (매개변수 생성자 작성시, 자동생성x)

3)상속에서 사용시, 반드시 기본생성자 작성

4)오버로딩을 이용하여 작성

 

객체 생성 시 전달받은 값으로 객체를 초기화 하기 위해 사용

  • 매개변수 생성자 작성 시, JVM이 기본 생성자를 자동으로 생성해주지 않음
  • 상속에서 사용 시 반드시 기본 생성자를 작성
  • 오버로딩을 이용하여 작성

 

생성자 규칙

  1. 클래스명과 메소드명이 동일하다.
  2. 리턴타입을 정의하지 않는다. (void도 사용하지 않는다.)

 

특징

생성자(Member())도 메소드의 일종으로 취급

메소드가 아닌 이유 : 생성자의 규칙이 있기 때문

생성자와 메소드의 차이

Member()라고 하는 생성자에도 ()가 들어가있음

*소괄호 ( ) : 매개변수 지정하는 역할

 


 

생성자와 관련된 개념

 

오버로딩(Overloading)

한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법

 

오버로딩 조건

1)같은 메소드 이름

2)매개변수의 개수 or 타입 or 순서가 달라야함

     반환타입에 영향 안줌

     매개변수에만 영향을 줌

     매개변수명이 다르다고 해도 개수,타입,순서가 같으면 중복에러남

 

this 레퍼런스 변수

예약어로써, 모든 인스턴스 메소드에 숨겨진 채 존재하는 레퍼런스로 할당된 객체를 가리킴

함수 실행 시 전달되는 객체의 주소를 자동으로 받음

  • 인스턴스 자신을 가리키는 참조변수
  • this()생성자와 연관 x
  • 인스턴스 메서드(생성자 포함)에서 사용가능
  • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
  • 내 주소값을 가지고 있는 변수
public class Academy{
		private String name; 
		public Academy() { }
		public Academy(String name) { **this.name = name;**  }
}

주황색 name끼리 같은 데이터

파란색 name끼리 같은 데이터

 

위와 같이 매개변수를 가지는 생성자에서 매개변수 명이 필드명과 같은 경우,

매개변수의 변수명이 우선이므로 this 객체를 이용하여 대입되는 변수가 필드라는 것을 구분해줌

 

 

this() 생성자

  • 생성자에서 다른 생성자 호출할 때 사용
  • 다른 생성자 호출 시 첫 줄에서만 사용 가능
public class Academy{
		private int age; private String name;
		public Academy() { **this(20, “김철수”)**; } 
		public Academy(int age, String name) {
				this.age = age;     
				this.name = name;  
		}
}

주황색 name끼리 같은 데이터

파란색 name끼리 같은 데이터

 

728x90
반응형

+ Recent posts