출처: http://javacan.madvirus.net

사실, getter와 setter를 굉장히 부담스럽게 여기는 분들도 많습니다.
아마도 get/set을 만드는 게 부담스런 이유중의 가장 큰 것이 바로 코딩하기가 귀찮기 때문일 것입니다.

자바의 Map 등을 사용하면 자바빈을 대체할 수 있고, 실제로 대부분의 프로그램은 get/set이 없다 하더라도 큰 어려움없이 만들 수 있기도 합니다. 어떤 사람들은 public 멤버 필드를 사용해서 get/set을 없애기도 합니다.

그렇다면 왜 굳이 get/set이 자바빈을 만드는 걸까요? 그 이유는 아마도 코드가 명확해지기 때문일 겁니다. 먼저 다음의 코드를 보죠.

Map map = new HashMap();
map.put("ID", rs.getString("MEMBER_ID"));
map.put("NAME", rs.getString("NAME"));
....
....
<%= map.get("ID") %>


여기는 벡터 를 이용한예제

Vector vc = new Vector();
vc.add("ID", rs.getString("MEMBER_ID"));
vc.add("NAME", rs.getString("NAME"));
....
....
<%= vc.elementAt("ID") %>

위 코드는 DB 테이블에서 읽어온 정보를 Map에 저장해서 사용하는 예입니다. 위와 같은 코드를 사용하면 자바빈을 사용하지 않고도 자바빈과 같은 흉내를 낼 수 있게 됩니다. 하지만, 스펠링 오류와 같은 사소한 문제에서 벗어나려면 많은 주의를 요합니다.

반면에 아래 코드를 보죠.

Member mem = new Member();
mem.setId(rs.getString("MEMBER_ID"));
mem.setName(rs.getString("NAME"));
...
<%= mem.getId() %>


일단, Member 클래스를 만들고 get/set 함수를 추가하는 노가다(?)가 따르지만, 코드만 보면 의미가 굉장히 명확해집니다. 게다가 스펠링 때문에 발생할 수 있는 버그를 최소한으로 줄일 수 있게 됩니다. (getId() 대신에 getID()나, GetId()와 같이 코드를 작성하면 컴파일 에러가 발생하게 됩니다.) 그렇다 하더라도, 제 아무리 명확한 의미를 제공한다고 하더라도 개발의 생산성에서 문제가 발생하는 건 사실입니다. private 필드 만들어주고 get/set 메소드를 만들어주는 추가적인 작업은 매우 귀찮으면서 시간을 잡아먹는 작업이니까요.

하지만, 시대가 좋아져서 이제 DB 테이블과 매핑되는 자바빈 클래스를 자동으로 만들어주는 코드 생성기도 출현했고, 더 나아가 Hibernate와 같이 테이블과 DB 테이블을 매핑해주는 도구가 출현했습니다. 이들은 귀찮은 작업들을 매우 빠르고 또 쉽게 할 수 있도록 도와주기 때문에 이제 자바빈을 만드는 작업은 매우 쉬워졌습니다.

저 역시 Map을 쓸까 자바빈을 새로 만들어서 쓸까 고민을 많이 했었지만, 최근엔 위에서 말했던 도구들의 힘을 빌어서 귀찮은 작업을 상당량 줄일 수 있었고 그래서 의미가 명확한 자바빈을 사용하는 추세입니다. 불편한 작업을 최소화해주는 도구를 채용하고 get/set이 있는 자바빈을 함께 사용해볼 것을 권합니다.
Posted by ilus


,