커피주문을 하면 커피를 만들어주고 싶다고 했을때, 생성된 커피는 커피가 무슨종류인지(아메리카노, 카페라떼) 그리고 샷추가의 정보가 들어있다고 할때 아래와 같이 만들어봣다.
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 |
package org.effectivejava.examples.chapter03.item10;
public class CoffeeToString10 {
private final String coffee;
private final int shots;
CoffeeToString10(String coffee, int shot){
this.coffee = coffee;
this.shots = shot;
}
@Override
public String toString(){
String mark="+";
for(int i =1;i<shots;i++){
mark +="+";
}
return String.format("(%s)%s", mark,coffee);
}
public String toString2(){
return super.toString();
}
public static void main(String[] args) {
CoffeeToString10 orderCoffee = new CoffeeToString10("lattee", 2);
System.out.println(orderCoffee.toString2());
System.out.println(orderCoffee.toString());
System.out.println(orderCoffee);
}
} |
cs |
결과를 보도록 하자.
1 2 3 | Result : org.effectivejava.examples.chapter03.item10.CoffeeToString10@17db660 ( 2)lattee ( 2)lattee | cs |
12 라인은 재정의를 해서 이쁘게 나온다.
하지만 15라인은 재정의를 안한 super 즉 Object의 Method toString이다.
패키지명을 포함한 Class의 이름과 @ 그리고 hash값을 기본적으로 보여주고있다.
아래의 코드를 충실히 수행하고있는거다.
1
2
3 |
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
} |
cs |
보통은 + 표시로 샷추가를 표시한다면 아래와 같은코드가 더 적합할것이다. 가능하다면 아래의 코드만 보고 결과가 어떻게 출력될지 한번 생각해보자...??(귀찮죠?)
12345678 @Overridepublic String toString(){String mark="+";for(int i =1;i<shot;i++){mark +="+";}return String.format("(%s)%s", mark,coffee);}cs
책에서는 이런 이야기들을 하고 있다.
-toString을 잘 만들어 놓으면 클래스를 좀 더 쾌적하게 사용할 수 있다.
-가능하다면 toString메서드는 객체 내의 중요 정보를 전부 담아 반환해야한다.
-toString이 반환하는 문자열에 포함되는 정보들은 전부 프로그래밍을 통해서 가져올 수 있도록(programmatic access)하라.
위예제에서 shot, coffee등을 개별적으로 가져올수있게 하라는 간단한 이야기이다.
equals와 hashCode의 일반 규약을 지키는 것보다는 덜 중요하지만 쾌적하덴다...쾌적....사용하자...
ps. prims의 highlight기능을 써서 code를 이쁘게 보일려고 posting를 오랜만에 해본다. 근데 뭔가 꺽쇠(<) 라던가 암튼 이모저모 불편하네? 코드는 이쁘게 보이는군^^;;http://colorscripter.com 이걸로 바꾸었더니 훨씬더 편하네요^^ ~! ㅎㅎㅎ 설치도 필요없고^^~!
'Effective JAVA 2판' 카테고리의 다른 글
Effective JAVA Item15 변경 기능성을 최소화 하라 - 실습 및 동료클래스 (0) | 2015.05.17 |
---|---|
Effective JAVA Item15 변경 가능성을 최소화 하라 (0) | 2015.05.09 |
Effective Java Item14 public 클래스 안에는 public 필드를 두지말고 접근자(accessor) 메소드를 사용한라 (0) | 2015.05.05 |
Effective Java Item 13 클래스와 그 멤버의 접근 권한을 최소화하자 (0) | 2015.05.05 |
Effective Java Item12 Comparable 구현을 고려하다. (0) | 2015.05.04 |