코드스테이츠 - 3회차 백엔드 부트캠프/Section 1

2022.09.05 월 - 생성자와 내부 클래스

곰돌이볼 2022. 9. 5. 08:55

📄 학습내용

생성자

  • 생성자 : 인스턴스를 생성할 때 호출되는 인스턴스 변수를 초기화하는 메서드
  • 조건
    1. 클래스명과 동일한 이름을 가져야함
    2. return이 없음
    3. 제어자는 반드시 public으로 선언되어야 함
  • 메소드와 마찬가지로 생성자도 오버로딩 가능
  • 기본 생성자와 매개변수가 있는 생성자
    • 기본 생성자 : 매개변수가 없는 생성자로, 클래스 내에 생성자가 없는 경우에는 자바 컴파일러가 자동으로 추가해줌
    • 매개변수가 있는 생성자 : 매개변수를 받아서 객체 초기화에 사용됨
    • 매개변수가 없는 생성자 : 매개변수 없이 객체를 초기화함
// 기본 생성자 - 자바 컴파일러가 자동으로 추가
생성자명 () {}

// 매개 변수가 있는 생성자
생성자명(매개변수) {
    ...
}

// 매개 변수가 없느 생성자
생성자명() {
    ....
}
  • this와 this()
    • this : 객체 자기 자신을 가리키는 참조변수로, 이를 통해서 객체 자신의 변수 & 메서드에 접근 가능
      • 멤버 변수와 지역 변수를 구분하기 위해서 사용
      • 메서드 내에서 다른 메서드를 사용 → 메서드 앞에 this.를 생략해도 컴파일러가 추가해줌
      • 생성자와 인스턴스 메소드에서 this 사용 가능, 클래스 메소드에서는 this 사용 불가능
    • this() : 클래스 내에 선언된 메소드를 객체 선언 없이 호출할 수 있듯이 클래스 내에서 선언된 다른 생성자를 호출하는데 사용하는 메소드
      • 조건 : 생상자 내부의 첫번째 줄에서만 사용 가능
    • this : 자기 자신의 객체, this() 메서드 : 자신의 생성자 호출
// 생성자 예시
class Example {
    int num = 10; // 멤버 변수
    
    // 기본 생성자
    public Example() {}
    
    // 매개변수가 있는 생성자1
    public Example(int num) {
        this.num = num; 
        // this.num = Exmample 멤버 변수
        // num = 지역 변수
        System.out.println("매개변수가 1개 있는 생성자");
    }
    
    // 매개변수가 있는 생성자2
    public Example(int num, String str) {
        this(num); // 매개변수가 있는 생성자1 호출
        System.out.println("매개변수가 2개 있는 생성자");
    }
}

 

내부 클래스

  • 내부 클래스란?
    • 클래스 내부에 선언된 클래스
  • 장점
    1. 코드의 복잡성을 줄일 수 있음
    2. 외부 클래스의 멤버들에게 쉽게 접근 가능
    3. 캡슐화
  • 종류
    • 인스턴스 내부 클래스
      • 외부 클래스 선언 및 초기화 후 사용 가능
      • 클래스 앞에 static 선언 X
    • 정적 내부 클래스
      • 외부 클래스 선언 없이 독립적으로 선언해서 사용 가능
      • 클래스 앞에 static 선언
      • 사용방법 : 외부클래스.정적_내부클래스 = new 생성자();
    • 지역 내부 클래스
      • 클래스 내의 메소드 내부에서만 사용 가능
      • 선언 후 바로 객체를 생성해서 사용
    • 익명 내부 클래스
      • 클래스 선언과 객체 생성을 동시에 하는 일회용 익명 클래스

 

[Optional 심화 실습] 텍스트 스트크래프트 프로그램

https://github.com/kung036/be-sprint-lol_program

 

 공부 난이도

생성자 & 내부 클래스 ☆☆☆★★

 

멤버란 무엇인가?

내부 클래스의 종류는? 어떤 변수를 사용가능하고 선언가능한가?

 

🌕 느낀점

  순간적으로 멤버가 무엇인지 잘모르겠다는 생각이 들었어서 검색을 해보았지만 명확하게 이해되는 개념은 찾지 못해서 아직도 개념이 모호하다. 멤버는 왜 객체와 클래스 사이에서 왔다갔다하면서 사용되는지 잘 모르겠다. 지난주에 이해하기를 객체에 포함된 개념이 멤버로 이해했고, 클래스는 필드, 메서드, 생성자, 이너 클래스로 구성되어 있다고 이해를 했다. 뭔가 점점 복잡하게 가니까 잘 모르겠다.