[ 문 제 ]
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 |