230224 체크포인트 (생성자, 내부클래스)

허크·2023년 2월 24일
0

생성자


생성자

인스턴스를 초기화 해주는 특수한 메서드

// 생성자 생성 : Alt+Insert -> Constructor -> Ctrl+A 후 Enter

// 1. 클래스 이름과 동일해야함  2. 반환 타입을 입력하면 안됨

Public Person(String name, String mbti, String job, String age) {
	this.name = name;
    this.mbti = mbti;
    this.job = job;
    this.age = age;
}
 

  • 위의 this는 언젠가 만들어질 인스턴스를 가리킴

  • 그리고 인스턴스 생성시 아래의 형식으로 생성자 호출 사용가능

Person duekryeol = new Person(김득렬, INTP, 교육훈련생, 30);




생성자 오버로딩

  • 필드 기본값 지정, 인스턴스화 공통된 동작 부여시, 깊은 복사의 경우 사용

  • 생성자가 하나라도 있으면 기본 생성자가 추가되지 않음

// 기본 생성자
Public Person() {}

// 생성자 오버로딩
Public Person(String name, String mbti, String job, String age) {
	this.name = name;
    this.mbti = mbti;
    this.job = job;
    this.age = age;
}

Public Person() {
	this("김언민", "ESTJ", "공무원","30")
}

  • this는 나중에 생기게 될 인스턴스를 가리킴
    하지만 this뒤에 ()를 붙이면 별개의 메서드가 되어 다른 생성자를 호출

// 아래코드는 바로 해당하는 생성자를 호출함
Person duekryeol = new Person(김득렬, INTP, 교육훈련생, 30);

// 변수를 아무것도 적지 않은 경우 생성자 오버로딩으로 
// 기본 생성자에 추가된 this()가 작동하게된다
Person duekryeol = new Person();





내부클래스



class OuterClass {
	class InstanceInnerClass // 인스턴스내부클래스
    class StaticInnerClass // 스태틱내부클래스
    // 2. Static 멤버는 Static 내부 클래스만 가질 수 있다.
    // 1. Static 멤버는 인스턴스 멤버를 참조할 수 없다.
    	Public void main () {
        	class LocalInnerClass // 로컬내부클래스
        }
}

  • 원칙 1 : 내부클래스를 기준으로, 외부 클래스의 멤버를 참조할 때 적용되는 규칙
    -> "스태틱 멤버인스턴스 멤버를 참조할 수 없다."
    -> 스태틱 내부 클래스에서는 인스턴스 내부 클래스를 인스턴스화할 수 없다.
    -> 스태틱 내부 클래스에서는 인스턴스 메서드를 호출할 수 없다.
    -> 스태틱 내부 클래스에서는 인스턴스 변수를 참조할 수 없다.

  • 원칙 2 : 내부클래스를 기준으로, 내부클래스 자신의 멤버를 선언할 때 적용되는 규칙
    -> "스태틱 멤버스태틱 내부 클래스에서만 선언할 수 있다."
    (※ 자바 17부터는 가능)





종합퀴즈 추가해설


종합퀴즈 13번


  • 매개변수 3개인 인스턴스의 흐름
    -> 3개짜리 생성자의 this()로 4개짜리 생성자 호출
    -> 4개짜리 생성자의 "세 번째 생성자" 출력
    -> 처리후 3개짜리 생성자로 돌아와서 밑의 "두 번째 생성자" 출력
  • 매개변수 4개인 인스턴스의 흐름
    -> 4개짜리 생성자의 "세 번째 생성자" 출력

  • 김코딩은 싱글이다?
    -> 김코딩은 isSingle의 값이 지정된게 없음
    -> isSingle의 기본값이 false
    -> 싱글이 아니다



종합퀴즈 8번


public class CozStudentsTest {
	public static void main(String[] args) {
    // 변수 29
    // 스태틱지역변수 30 
    // 변수 29 
}    
	static void nextGeneration () {}
    // 지역변수 30 
}

class CozStudents {}

  • 내부 메소드의 averageAge 매개변수는 메소드 내에서만 사용되는 지역 변수
    -> 객체 cozStudents의 필드 값 averageAge은 변경되지 않음.
    -> main 메소드에서 출력하는 최종적인 averageAge 값과 다르게 나옴
profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글