컴퓨터공학 💻 도서관📚

Part2. 2-6 생성자 (with. 파인만 기법 + 문제출제) 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 2-6 생성자 (with. 파인만 기법 + 문제출제)

들판속초록풀 2024. 2. 28. 20:47

생성자 기본 문법 (정의)

// <class_name>( [argument_list] )   {  [statements]  }

// ex)
public Student(int studentNumber, String studentName, int grade) {
      
		this.studentNumber = studentNumber;
		this.studentName = studentName;
		this.grade = grade;
	}

멤버변수 이름과 매개변수 이름이 같을 때 멤버변수 앞에 “ this. ” 를 붙여준다
   this.studentNumber = studentNumber  ( this.멤버변수명 = 매개변수명 )
   (보통 두 개의 이름을 같게 한다. 나중에 찾아보기 쉽기 때문에)

 

 

객체를 생성할 때, new 키워드와 함께 사용 - new Student();

생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new 와 함께 호출 됨

Student studentLee = new Student();
//클래스  인스턴스         생성자

 

 

생성자는 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출한다

(생성자의 역할은 인스턴스를 초기화하는 것이다.)

생성자는 반환 값이 없고, 클래스의 이름과 동일

대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음

 

 

기본 생성자클래스에 생성자를 구현하지 않아도 컴파일러가 제공하는 기본 생성자

                        new 키워드와 함께 호출할 수 있음 

 

                      클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌

 

TMI) : 컴파일의 제일 처음 단계인 프리 컴파일 단계에서 코드들이 명령어 구조로 바뀔때

           필요한 코드들이 자동으로 중간중간에 들어간다. 우리가 썼던 코드 외에도

           컴파일할 때 필요한 코드들이 들어가는데 이때 기본 생성자도 같이 들어간다.

 

 

1.기본 생성자를 직접 선언하는 법

생성자가 있으면 기본 생성자는 제공되지 않는다
그래서 기본 생성자도 쓰고 싶으면 기본 생성자를 직접 선언하면 된다.
public Student() {}   이런 식으로

 

2.기본 생성자가 불필요한 경우
어떤 객체를 만들려는데 항상 이름, 학번, 학년 같은 필수요소가 꼭 있어야 하면 기본 생성자를 선언하지 않는다.

 

 

 

특집 : 변수를 구별하라!!!

pulbic class Student {
    public int studentNumber;
    public String studentName;
    public int grade;            // grade 는 멤버변수
    
    public String showStudentInfo() {
    	int i;                  // i 는 지역변수
        
        return studentName + "학생의 학번은" + studentNumber + "이고 " + grade + "학년입니다.");
    }
}

같은 int 변수이지만   grade는 멤버변수여서 자동으로 초기화가 되지만   i 는 지역변수여서 초기화가 되지 않는다.

(멤버변수는 출력해보면 0이나 null 로 초기화되어 있다)

 

public class Student {

	public int studentNumber;    //멤버변수
	public String studentName;   //멤버변수 
	public int grade;            //멤버변수
	
	public Student(int studentNumber, String studentName, int grade) {   //매개변수
		this.studentNumber = studentNumber;    /* 멤버변수 = 매개변수 */
		this.studentName = studentName;        /* 멤버변수 = 매개변수 */
		this.grade = grade;                    /* 멤버변수 = 매개변수 */
	} 
	
	public String showStudentInfo() {
	    return studentName + "학생의 학번은 " + studentNumber + "이고 " + grade + "학년입니다.";
	}
}

 

this 를  안 쓰고   studentNumver = studentNumber 이렇게 하면 안 된다.
이러면 나는 멤버변수에 값을 대입하고 싶은데 매개변수에 매개변수의 값이 대입된다(자기 자신에게)


this.studentNumber = studentNumber;
첫 번째 studentNumber멤버변수 studentNumber 이고 두 번째 studentNumber매개변수 studentNumber이다.

매개변수  ==  지역변수

 

 

[ 문제 : 생성자의 역할을 서술하시오 (서술형) ]

[ 문제 : 생성자의 이름은 누구의 이름과 같은가? ]

[ 문제 : 생성자가 있어도 컴파일러가 기본 생성자를 제공한다.  o,x ]

Comments