개발 수업/JAVA

[Java] 클래스/this()

오늘 하루s 2023. 5. 17. 18:44
728x90
더보기

Day14-1. 230517

생성자

다른 생성자 호출 : this()

this() : 객체 자신의 또 다른 생성자를 호출할 때 사용.(동일 클래스 내에서 사용)

 

- 생성자 오버로딩이 많아지면 생성자 간의 중복된 코드 발생.

초기화 내용이 비슷한 생성자들에서 이런 현상 발생.

-> 초기화 내용을 한 생성자에 몰아 작성

-> 다른 생성자는 초기화 내용을 작성한 생성자를 this()로 호출.

 

※주의. 생성자의 첫 줄에서만 허용됨.

클래스([매개변수,...]){
   this(매개변수,...,값,...);<--클래스의 다른 생성자 호출
   실행문;
}

 

1
2
3
4
5
6
7
8
9
10
    public Car06y(String company,int price) {
        this.company=company;
        this.price=price;
    }    
    public Car06(String company) {
        this.company=company;
    }    
    public Car06(int price) {
        this.price=price;
    }
cs

this()는 생성자 오버로딩에서 생기는 중복 코드를 제거 해줌.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package chap0607;
 
import java.util.Date;
 
public class Car06 {
    //field : data
    private String  company;
    private int     price;
    private char    grade; //에너지등급 예)'A','B'
    private boolean isHybrid; //하이브리드유뮤 예)true,false 
    private Date    productionDay; //생산일
    
    //constructor
    //생성자 오버로딩
    public Car06() {}
    public Car06( String company,int price,char grade,boolean isHybrid,Date productionDay) {
        this.company=company;
        this.price= price;
        this.grade=grade;
        this.isHybrid=isHybrid;
        this.productionDay=productionDay;
    }    
    public Car06(String company,int price) {
        this(company, price, 'B' , falsenew Date() );
    }    
    public Car06(String company) {
        this(company, 0' ' , falsenull);
    }
    public Car06(int price) {
        this("쌍용", price, 'B' , falsenew Date());
    }
}
cs

 

 

메소드에서 오버라이드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package chap0607;
 
import java.util.Date;
 
public class Car06 {
    //field : data
    private String     company;
    private int     price;
    private char      grade; //에너지등급 예)'A','B'
    private boolean isHybrid; //하이브리드유뮤 예)true,false 
    private Date    productionDay; //생산일
    
    //constructor
    //생성자 오버로딩
    public Car06() {}
    public Car06( String company,int price,char grade,boolean isHybrid,Date productionDay) {
        this.company=company;
        this. price= price;
        this.grade=grade;
        this.isHybrid=isHybrid;
        this.productionDay=productionDay;
    }    
    public Car06(String company,int price) {
        this(company, price, 'B' , falsenew Date() );
    }    
    public Car06(String company) {
        this(company, 0' ' , falsenull);
    }
    public Car06(int price) {
        this("쌍용", price, 'B' , falsenew Date());
    }
 
    //메소드
    public void showInfo() {
    System.out.println("[company]="+company+
                                        ",[price]="+price+
                                        ",[grade]="+grade+
                                        ",[isHybrid]="+isHybrid+
                                        ",[productionDay]="+productionDay);
    }
    /* 내가 선언함.
    @Override
    public String toString() {
        return "[company]="+company+
                ",[price]="+price+
                ",[grade]="+grade+
                ",[isHybrid]="+isHybrid+
                ",[productionDay]="+productionDay;
    }
    */
    @Override
    public String toString() {
        return "Car06 [company=" + company + ", price=" + price 
+ ", grade=" + grade + ", isHybrid=" + isHybrid
                + ", productionDay=" + productionDay + "]";
    }
}
cs

Car06Main클래스>

1
2
3
4
5
6
7
8
9
10
11
12
package chap0607;
 
import java.util.Date;
 
public class Car06Main {
    public static void main(String[] args) {
        System.out.println(myCar1);
        System.out.println(myCar1.toString());
        myCar1.showInfo();
    }
}
 
cs
더보기

* 실행 결과

 

Car06 [company=좋은회사, price=0, grade= , isHybrid=false, productionDay=null]
Car06 [company=좋은회사, price=0, grade= , isHybrid=false, productionDay=null]
[company]=좋은회사,[price]=0,[grade]= ,[isHybrid]=false,[productionDay]=null

728x90