JavaRush /Java Blog /Random-KO /ToStringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ToString() ๋ฉ”์„œ๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•.
dio
๋ ˆ๋ฒจ 16
ะœะพัะบะฒะฐ

ToStringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ToString() ๋ฉ”์„œ๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•.

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
ToStringBuilder ๋Š” Apache Commons lang ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„์šฐ๋ฏธ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค . ToStringBuilder๋Š” Apache Commons Lang ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ด๋Š” toString() ๋ฉ”์„œ๋“œ์—์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด ๋ฐ์ดํ„ฐ์™€ ์–‘, ํ˜•์‹์— ๋Œ€ํ•œ ์™„์ „ํ•˜๊ณ  ๋” ๋‚˜์€ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ToStringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ToString() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ToStringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— Commons-Lang์„ ํฌํ•จํ•˜๋ ค๋ฉด Maven ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ž˜์Šค์—์„œ ToString() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์‚ฌ์šฉ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค . ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ToStringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ toString() ๋ฉ”์„œ๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด AbstractUser.java, WebUser.java ๋ฐ GuestUser.java๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ๋ชจ๋ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. commons-lang commons-lang 2.5
AbstractUser.java
package com.howtodoinjava.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import com.howtodoinjava.style.CustomToStringStyle; public abstract class AbstractUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String firstName; private String lastName; private String age; //Setterss and getters }
์›น์‚ฌ์šฉ์ž.java
public class WebUser extends AbstractUser { private static final long serialVersionUID = 1L; private Date lastLoggedIn; public Date getLastLoggedIn() { return lastLoggedIn; } public void setLastLoggedIn(Date lastLoggedIn) { this.lastLoggedIn = lastLoggedIn; } }
GuestUser.java
public class GuestUser extends WebUser { private static final long serialVersionUID = 1L; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€
1) ์Šˆํผ ํด๋ž˜์Šค์˜ toString() ๋ฉ”์†Œ๋“œ๋Š” ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์ตœ์ƒ์œ„ ๊ฐœ์ฒด ํด๋ž˜์Šค์—์„œ toString() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ AbstractUser.java์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์ž์ฒด ๋ฒ„์ „์˜ toString() ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. @Override public String toString() { return ToStringBuilder.reflectionToString(this); } ์œ„์˜ ToString() ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ToString() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ํ•œ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. package com.howtodoinjava; import java.util.Date; import com.howtodoinjava.model.GuestUser; import com.howtodoinjava.model.WebUser; public class ToStringDemoUsage { public static void main(String[] args) { GuestUser guest = getGuestUser(); System.out.println(guest); } public static GuestUser getGuestUser() { GuestUser user = new GuestUser(); user.setId(100); user.setFirstName("Lokesh"); user.setLastName("Gupta"); user.setAge("30"); user.setLastLoggedIn(new Date()); user.setLocation("New Delhi"); return user; } } Output: com.howtodoinjava.model.GuestUser@d1f24bb[location=New Delhi,lastLoggedIn=Mon Jun 03 13:31:05 IST 2013,id=100,firstName=Lokesh,lastName=Gupta,age=30]
2) ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๋ชจ๋“  ์œ ํ˜•์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ˜•์‹
ToString ๋ฉ”์„œ๋“œ์˜ ๋ชจ๋“  ํ•„๋“œ์— ์‚ฌ์šฉ์ž ์ง€์ • ํ˜•์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํ˜•์‹ํ™”์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. package com.howtodoinjava.style; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.builder.ToStringStyle; public class CustomToStringStyle extends ToStringStyle { private static final long serialVersionUID = 1L; protected void appendDetail(StringBuffer buffer, String fieldName, Object value) { if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd").format(value); } buffer.append(value); } } ํ˜•์‹ํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐ์น˜ํ•˜์‹ญ์‹œ์˜ค. @Override public String toString() { return ToStringBuilder.reflectionToString(this, new CustomToStringStyle()); } Output: com.howtodoinjava.model.GuestUser@7910769b[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30]
3) ์‰ฌ์šด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ์Šˆํผ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์— ์‚ฌ์šฉ
ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ToString()์„ ์žฌ์ •์˜ํ•˜์—ฌ ์Šˆํผ ํด๋ž˜์Šค์—์„œ ๋ฐ›์€ ์ •๋ณด์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜์‹ญ์‹œ์˜ค. public class WebUser extends AbstractUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("lastLoggedIn", lastLoggedIn).toString(); } } Output: com.howtodoinjava.model.GuestUser@22aed3a5[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30,CustomMessage=I have been added additionally]
4) ์ƒ์† ๊ณ„์ธต์˜ ํŠน์ • ์ˆ˜์ค€๊นŒ์ง€๋งŒ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ชจ๋“  ์Šˆํผ ํด๋ž˜์Šค์˜ ํ•„๋“œ๋ฅผ ํ™•์žฅํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์† ๊ณ„์ธต์˜ ํŠน์ • ์ˆ˜์ค€๊นŒ์ง€ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. public class GuestUser extends WebUser { @Override public String toString() { return ToStringBuilder.reflectionToString(this,new CustomToStringStyle(),true,WebUser.class); } } Output: com.howtodoinjava.model.GuestUser@18dd7404[location=New Delhi,lastLoggedIn=2013-06-03]
5) ์›ํ•˜๋Š” ์ •๋ณด๋งŒ ํ‘œ์‹œ
ToString() ๋ฉ”์„œ๋“œ์— ํด๋ž˜์Šค์˜ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. public abstract class AbstractUser implements Serializable { //Other code @Override public String toString() { return new ToStringBuilder(this) .append("firstName", firstName) .append("lastName", lastName) .append("age", age).toString(); } } public class GuestUser extends WebUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("location", location).toString(); } } Output: com.howtodoinjava.model.GuestUser@6483dae1[firstName=Lokesh,lastName=Gupta,age=30,location=New Delhi] ์ด ๋งํฌ์—์„œ ์œ„ ์˜ˆ์ œ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์›๋ณธ ๋‹ค์šด๋กœ๋“œ : ToStringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ toString()์„ ํšจ๊ณผ์ ์œผ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฒˆ์—ญ๋จ
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION