[TIL] 코드스테이츠 SEB BE Day 11

💡 Today I Will Learn

  • 생성자

✏️ Summary


  • 생성자

    인스턴스가 생성될 때 호출되는 초기화 메서드이다.
    인스턴스 생성은 new 키워드이며, 인생성자는 인스턴스 변수를 초기화하는 메서드이다.

    클래스명(매개변수){
      ...
    }
    

    생성자의 기본구조는 위와 같으며, 몇가지 규칙이 있다.

    1. 클래스 이름과 생성자의 이름이 같다.
    2. 반환타입(return type)이 없다.
    3. Overloading(오버로딩)이 가능하므로 여러개의 생성자를 가질 수 있다.

    따라서 메서드 시그니처에 따라 다양하게 여러개의 생성자를 사용할 수 있다.

    • 기본생성자(default Constructor) vs 매개변수가 있는 생성자

      • 기본생성자
        생성자를 따로 생성하지 않는다면 컴파일러가 내부적으로 기본 생성자를 추가한다.

        클래스명(){
                
        }
        
      • 매개변수가 있는 생성자
        매개변수를 입력받아 인스턴스를 초기화하여 사용한다. 인스턴스마다 다른 특성을 이용할 수 있으니 유용하다.

        clss Test{
          int v1;
          String v2;
        
          public Test(int v1){
            this.v1 = v1;
          }
          public Test(String v2){
            this.v2 = v2;
          }
          public Test(int v1, String v2){
            this.v1 = v1;
            this.v2 = v2;
          }
        }
        
  • this() vs this

    • this()
      클래스내 생성자끼리 상호 호출이 가능하다.
      this() 메서드는 속한 클래스 내에 다른 생성자를 호출하는 경우에 사용된다. 다만 두가지 규칙이 있다.

      class Test{
        public Test(){
          System.out.println("first");
        }
      
        public Test(int v){
          this();
          System.out.println("second");
        }
      }
      
      /*  first
       *  first
       *  second
       */
      
      1. 반드시 생성자의 내부에서만 사용할 수 있다.
      2. 생성자의 첫 줄에 위치해야 한다.
    • this
      인스턴스 변수와 생성자의 매개변수 이름이 같으면 구분하기 어려워진다.
      따라서 이를 구분하기 위해 this 키워드를 사용한다.

       clss Test{
         int v1;
         String v2;
      
         public Test(int v1, String v2){
           this.v1 = v1;
           this.v2 = v2;
         }
       }
      

    this 키워드가 적용되면 인스턴스변수를, 없는 것은 지역변수를 의미한다.

  • 초기화 블록

    멤버변수(클래스, 인스턴스)는 초기화하지 않아도 자동으로 초기화되지만, 적절하게 초기화하는 것이 더 좋다.

    1. 명시적 초기화
    2. 생성자 초기화
    3. 초기화 블록을 이용한 초기화

    1,2는 앞에서 다루었던 내용이므로 생략하고, 3의 내용을 다루도록 한다.

    • 인스턴스 초기화 블록

      인스턴스가 생성될 때마다 실행되며, 생성자보다 우선적으로 처리가 된다.

      Class Test{
        int a;
        int b;
        String c;
      
        {
          this.c = "Test";
          this.a = 3;
        }
      }
      

      ’{}’ 중괄호를 이용해 정의한다.
      생성자를 이용한 초기화를 많이 사용하지만, 생성자가 많아 공통적으로 초기화시켜야할 변수가 있다면 코드중복을 줄일 수 있다.

    • 클래스 초기화 블록

      위와 다르게 클래스가 처음에 메모리에 로딩될 때 한번 수행된다.

      Class Test{
        static int a;
        int b;
        String c;
      
        static{
          this.a = 3;
        }
      }
      

      위의 초기화 방법들로 할 수 없는 클래스 변수를 초기화할 때 사용된다.

📌 정리


클래스, 메서드, 생성자까지 손에 가장 익어야할 기초 부분을 오늘까지 다 다뤘다.
이전 유닛과 비교해서 정리시간이 많이 할당되어 있다. OOP 기초인만큼 블로깅, 노트 등을 하며 기초를 탄탄히 다지라는 의도로 생각된다. 이에 맞게 OOP 파트가 끝나고 블로그 새로운 카테고리에 포스팅을 준비해야겠다😀

🎯 Tomorrow


  • 상속
  • 캡슐화

Back to [TIL] 코드스테이츠 SEB BE Day 10