본문 바로가기

프로그래밍/코드분석

자바의 정석 연습문제 6-2

[ 문 제 ]

class Exercise6_2 {
public static void main(String args[]) {
SutdaCard card1 = new SutdaCard(3, false);
SutdaCard card2 = new SutdaCard();

System.out.println(card1.info());
System.out.println(card2.info());
}
}

class SutdaCard {
/*
(1) 알맞은 코드를 넣어 완성하시오.
*/
}


출력값 

3

1K



[ 풀 이 ]


class exercise {
public static void main(String args[]) {
SutdaCard card1 = new SutdaCard(3, false);
SutdaCard card2 = new SutdaCard();

System.out.println(card1.info());
System.out.println(card2.info());
}
}

class SutdaCard {

int num;
boolean isKwang;

SutdaCard (){
this.num = 1;
this.isKwang = true;
}
SutdaCard (int num, boolean isKwang){
this.num = num;
this.isKwang = isKwang;
}

public String info(){

if( num == 1){
return num + "K";
} else{
return num + "";
}
}
}


처음 풀었을 땐 "뭐 이런 문제가 다 있어?' 라고 생각했는데

다시 복습하고 나서 차근차근 풀어보니까 풀린다.


먼저 내가 처음 풀 때랑 비교했을 때 시사점을 적어보도록 하겠다.



1. 생성자는 두 개 이상 만들 수 있다. (즉, 오버로딩이 가능하다.)


위 코드에서 보면



SutdaCard (){
this.num = 1;
this.isKwang = true;
}
SutdaCard (int num, boolean isKwang){
this.num = num;
this.isKwang = isKwang;
}

생성자를 두 개 정의하고 있다.

한 개는 매개변수가 없는 생성자이고

한 개는 매개변수가 있는 생성자이다.

위 코드를 작성했지만, 여전히 개선의 여지가 남아있다.


SutdaCard (){
this(1, true);

매개변수가 없는 생성자를 위와 같이 this를 이용해 인스턴스 변수를 초기화 할 수 있다.



2.  우리는 인스턴스 생성 부분을 보고 생성자를 어떻게 만들어줘야 할지 유추해야 한다.

SutdaCard card1 = new SutdaCard(3, false);
SutdaCard card2 = new SutdaCard();


card1은 매개변수가 전달이 되기 때문에 매개변수가 있는 생성자를 만들어줘야 한다.

card2는 매개변수가 전달이 되지 않는 기본생성자를 만들어 줘야 한다.


3. 출력값 3과 1K를 보고 info메서드를 만들어줘야 한다.

1. System.out.println(card1.info());
2. System.out.println(card2.info());

1번 문장의 출력값을 3

2번 문자의 출력값을 1K로 만들어줘야 한다.


Card1은 매개변수로 3과 false를 던지고

Card2는 매개변수를 던지지 않는다.


4. 이후 info 메서드를 만든다.

public String info(){

if( num == 1){
return num + "K";
} else{
return num + "";
}
}

여기서 고민했던 것이 반환값(리턴타입)이었다.

void로 한 뒤, System.out.println ( " 내용 " ) 으로 하려 했더니 위에 메인메서드에 출력메서드가 있었다.


String으로 하자니 else 에 있는 리턴문의 처리를 어떻게 해야 할지 몰랐다.

return num;으로만 하면 정수타입이라서 String을 int로 바꿔줘야 하나? 라는 생각이 들었다.


그런데 이를 그냥 num + " "; 이와 같이 공백으로 처리하면 되는 문제였다.


아래와 같이 더 간단하게 만들 수도 있다.

String info() { // 숫자를 문자열로 반환한다. 광(光)인 경우 K를 덧붙인다.
return num + ( isKwang? "K" : "");
}


'프로그래밍 > 코드분석' 카테고리의 다른 글

자바의 정석 연습문제 6-23  (0) 2016.08.17
자바의 정석 연습문제 6-4  (0) 2016.08.16
자바의 정석 연습문제 9-4  (0) 2016.08.13
자바의 정석 연습문제 9-3  (0) 2016.08.13
자바의 정석 연습문제 9-1  (0) 2016.08.13