본문 바로가기
Study in Bootcamp/회고

Day 12 자바 JAVA 이론 (생성자, 내부 클래스)

by Bhinney 2022. 7. 8.

2022.07.08


1. 오늘의 학습

  • 생성자
  • this와 this()
  • 내부 클래스

2. 학습 내용

생성자(Constructor)

1) 생성자란
     • 객체를 생성하는 클래스의 요소
     • 인스턴스 생성 시 인스턴스를 초기화하는 메서드

2) 생성자의 특징
     1️⃣ 생성자의 이름은 반드시 클래스 이름과 같아야 함
          (만약, 생성자 이름 != 클래스 이름 --> 해당 메서드는 생성자의 기능 불가)
     2️⃣ 생성자는 리턴 타입이 존재하지 않음
          (메서드에서 return이 없을 때 쓰는 void도 쓰지 않음)
     3️⃣ 생성자도 오버로딩이 가능
          (클래스 내 여러 생성자 존재 가능)
package org.example;

public class Clothes {
    public static void main(String[] args){
        ClothesExample ce1 = new ClothesExample();
        ClothesExample ce2 = new ClothesExample(100);
        ClothesExample ce3 = new ClothesExample("ZARA");
        ClothesExample ce4 = new ClothesExample(90.0);
    }
}

class ClothesExample{
    String color = "RED";

/* 생성자 이름 : ClothesExample == 클래스 이름 : ClothesExample
   return타입이 존재하지 않고, void도 없음 */
    ClothesExample(){ 
        System.out.println("이 옷의 컬러는 : " + color );}
        
    ClothesExample(int a){
        System.out.println("이 옷의 가격은 : " + a + "달러");}

    ClothesExample(String name){
        System.out.println("이 옷의 브랜드명은 : " + name);}

    ClothesExample(double s){
        System.out.println("이 옷의 사이즈 : " + s);}
}

/* 출력
이 옷의 컬러는 : RED
이 옷의 가격은 : 100달러
이 옷의 브랜드명은 : ZARA
이 옷의 사이즈 : 90.0
*/


3) 기본 생성자
     • 매개 변수가 없는 생성자
     • 클래스 내에는 반드시 한 개 이상의 생성자가 있어야 함
        (생성자가 없음에도 출력이 된 이유 : 자바가 자동적으로 추가하였기 때문)

4) 매개 변수가 있는 생성자
     • 메서드처럼 매개 변수를 통해 호출하면, 그 값을 인스턴스를 초기화하는 데 사용
     • 매개 변수가 있으면, 인스턴스를 만든 후 값을 일일히 설정하지 않아도 되기에 편리

package org.example;

public class Clothes {
    public static void main(String[] args){
        ClothesExample ce = new ClothesExample();
        ClothesExample ce2 = new ClothesExample(100);
        }
}

class ClothesExample{
	String color = "RED";
    
	public ClothesExample(){ // 기본 생성자
    System.out.println("이 옷의 컬러는 : " + color );}
    
    public ClothesExample(int a){ // 매개 변수가 있는 생성자
    System.out.println("이 옷의 가격은 : " + a + "달러");}
}

/* 출력
이 옷의 컬러는 : RED
이 옷의 가격은 : 100달러
*/​

this() 메서드
• 자신이 속한 클래스에서 다른 생성자를 호출하는 경우 사용
• this() 메서드 사용 조건
     1️⃣ 생성자 내부에서만 사용 가능
     2️⃣ 생성자의 첫 줄에 위치
package org.example;

public class Clothes {
    public static void main(String[] args){
        ClothesExample ce1 = new ClothesExample();
        System.out.println("---------- 구분선 ----------");
        ClothesExample ce2 = new ClothesExample(100);
        }
}

class ClothesExample{ 
	String color = "RED";
    
	public ClothesExample(){ // 첫 번째 생성자
    System.out.println("이 옷의 컬러는 : " + color );}
    
    public ClothesExample(int a){ // 두 번째 생성자
    this(); // 생성자 안 첫 번째 줄에 위치
    System.out.println("이 옷의 가격은 : " + a + "달러");}
}

/* 출력
이 옷의 컬러는 : RED
---------- 구분선 ----------
이 옷의 컬러는 : RED
이 옷의 가격은 : 100달러

• 구분선 아래가 this(); 메서드가 실행된 것.
• 두 번째 생성자 안에 this();메서드가 실행되면서 첫 번째 생성자가 호출이 되고, 다음으로 두 번째 생성자가 호출 됨.
• 만약 두 번 째 생성자의 매개 변수를 설정해주지 않으면 --> 구분선 아래로 가격은 출력되지 않고 컬러만 출력됨.
*/
this 키워드
• 예문처럼 인스턴스 변수와 매개 변수의 이름이 같을 경우, 문제 발생 가능
     --> 인스턴스 변수와 매개 변수를 구분해주는 기능 
package org.example;

public class Clothes {
    public static void main(String[] args){
        ClothesExample ce = new ClothesExample("ZARA","RED",100);
        System.out.println("이 옷의 브랜드는 " + ce.getName()+ "이고, 색상은 " + ce.getColor() + "이고, 가격은" + ce.getPrice() + "달러 입니다.");
    }
}

class ClothesExample{
	// 인스턴스 변수
    private String name;
    private String color;
    private int price;
			// 매개 변수
    public ClothesExample(String name, String color, int price){
    	/* this. 키워드가 없을 경우, 
        인스턴스 변수와 매개 변수 구분이 안 됨.
        -> this. 키워드를 사용하여,
        인스턴스 변수와 매개 변수 구분을 도와줌. 
        인스턴스 변수--> private String (this.)name */
        this.name = name;
        this.color = color;
        this.price = price;
    }

    public String getName() {
        return name;}
    public String getColor() {
        return color;}

    public int getPrice() {
        return price;}
}

/* 출력
이 옷의 브랜드는 ZARA이고, 색상은 RED이고, 가격은100달러 입니다.
*/
내부 클래스(Inner Class)

1) 내부 클래스란
     • 클래스 안에 선언된 클래스
     • 외부 클래스와 내부 클래스가 연관이 있을 경우 사용 --> for 편리

2) 내부 클래스의 종류
     1️⃣ 인스턴스 내부 클래스
     2️⃣ 정적 내부 클래스
     3️⃣ 지역 내부 클래스
     4️⃣ 익명 내부 클래스

3. 돌아보기

어제에 이어 오늘도 기초 개념을 배웠다. 비슷한 듯 다른 이름들이 여러 개가 휘몰아치면서, 내 머릿 속은 혼돈의 장이 되어버렸다. 그래서 어제의 내용들을 틀어두고 같이 보면서 배워나갔다. 확실히 예제들을 써보고 응용해서 다시 돌려보는 게 굉장히 도움이 되었다. 어제의 내용을 불러와서 다시 계속 바꿔보고 대입해보았다. 덕분에 이해도가 올라갔다. 조금 시간이 걸려도 제대로 처음에 알고 넘어가고 싶어서 이렇게 했다. 지금 제대로 안하면 나중에도 분명히 헷갈릴 것 같았기 때문이다. 덕분에 저번 개념도 깉이 잡아 갈 수 있었다. 그렇지만 아직까지 누군가에게 설명하라고 하면, 내가 정리한 블로그나 노트를 보고 설명해야하는 수준이라 조금 더 학습이 필요할 것 같다. 그리고 아직 내부 클래스 종류는 정리할 정도로 이해하지 못했기에 다시 복습하면서 추가해야겠다.

 

주말동안 다시 한 번 복습하고, 블로그도 조금 수정할 부분들을 수정해야겠다.

댓글