티스토리 뷰

프로그램 코드에서 데이터를 표현하기 위해서 배열, Map등을 사용한다, 특히 Map은 필드(Key), 값(Value)로 되어 있어필요시  필드(Key) 정의하여 사용하여 유연하게 사용할 수 있지만 를 적용할 수 있지만 프로그램 코드 여러 군데에서 필드를 정의(새롭게 만듬)하여  사용하면 Map으로 선언된 필드의 명확성이 없어서 contains를 사용하여 검사를 하는 로직을 넣어야 하는 단점이 있다.이것은 데이터의 의미가 가변적으로 변하는 것으로 프로그램 코드 작성시 주의를 해야 한다. 특히 파라메터로 전달 해서  필드(Key)를 추가하는 경우는 피해야 하는 것 중에 하나이다. 아니 하지 많아야 하는 것 중에 하나이다. 데이터의 값이 여러 곳에서 변경되면 데이터의 필드는 명시적으로 표현이야 명확하여야 한다. 명확하지 않은 것 보다 좋다. 또한 JSON, XML같은 포맷으로 직렬화 할 때도 포맷 변경에 따른 추가/삭제할 때 객체의 수정하기 쉬우면 결과를 예상할 수 있다. 명확한 테이더는 객체로 만들어야 하는데 이것을 캡슐화라 간단히 말할 수 있다.

프로그램에서 모듈화는 자신을 숨기는 것으로 자신을 제외한 다른 코드에 드러내지 않는 것이다, 클래스는 정보를 숨기는 용도로 설계된 것으로 하나의 클래스는 메서드(동작)과 변수(멤버)를 정의한다.  이것은 잘 정리된 추상화를 나타내는 것으로 데이터 클래스, 도구 클래스, 업무(기능) 클래스로 개인적으로 생각하며 각각 다음과 같은 의미를 가지고 있다.

데이터 클래스

객체지향 프로그램은 독립적이고 자기 자신을 관리하고 스스로 결정하는 책임이 있도록 객체는 설계해야 하지만 각 변수(멤버)에 대해서 값에 대한 책임을 지는 객체를 의미한다. set, get 이외에 값에 대한 Validation을 담당한다.

도구 클래스

자바에서 Utils 와 같이 Static 메서드로 구성된 객체로 메서드가 하나의 기능을 하고 어디에서도 사용할 수 있는 객체로 문자, 시간 등을 해석하는 객체이다. . 객체 안의 메서드는 동일 기능을 모아서 응집도를 높일 수 있어야 한다.

업무 클래스

비즈니스 로직을 담당하는 클래스로 하나의 클래스는 하나의 기능을 담당하게 되도록 설계하여야 한다. 모든 것이 담아 있는 신을 만들지 않도록 하여야 한다. 업무 클래스는 단위 업무의 기능 즉 단위 기능의 책임을 수행하는 클래스와 단위 업무를 묶어서 전체 프로그램의 흐름을 제어하는 클래스로 나뉘어 지면 각 단위 업무는 인터페이스를 통해서 연결하여 약한 결합을 자지고 단위 업무는 동일 업무(기능)을 수행하기 위해서 응집도를 높이도록 설계해야 한다. .

객체, 클래스, 인스턴스

객체와 클래스는 사물과 사물을 만드는 기계로 이야기할 수 있다. 즉 자동차는 객체이고 포니, 그랜저 등 자동차 회사에서 자동차를 만들기 위한 설계도이다. 그 설계도가  생산라인에 적용되어서 자동차를 만드는 것을 인스턴스라 한다. 즉 메모리에 할당된 것을 인스턴스라 한다.

Java Bean

JavaBean은 UI(JSP)에서 자바코드와 로직 부분을 나누어 복잡하 자바코드를 줄이고 프로그램의 재사용을 증가시키기 위해서 다음과 같은 규칙을 잦는 클래스를 의미한다.

  1.  멤버변수마다 별도의 get/set 메소드가 존재해야 한다.
  2.  get 메소드는 매개변수가 존재하지 않아야 한다.
  3.  set 메소드는 반드시 하나 이상의 매개변수가 존재해야 한다.
  4.  생성자는 매개변수가 존재하지 않아야 한다.
  5.  멤버변수의 접근제어자는 private이고 각 set/get메소드의 접근제어자는 public , 클래스의 접근제어자는 public으로 정의한다. 

Spring Bean

EJB((Enterprise JavaBean)가 나오면서 각 회사들은 자사의 Framework에 최적화시킨 설계 규약을 만들어 사용하여 Java Bean를 복잡하게 사용되었다, 즉 각 회사에서 발표한 방식으로 개발하여 벤더 종속적인 코드를 생산하여 자바 코드의 가독성이 떨어지고 특정 기술을 상속받아 사용하여 확장성이 떨어지게 된다. 

이에 순수 자바로 돌아 가자는 것이  POJO(Plain Old Java Object) 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로 순수 JavaBean을 의미한다.  POJO는 객체지향 원리에 충실하면서 환경이나 기술에 종속되지 않고 재활용이 가능하도록 설계된 객체를 의미하는 것으로 Spring Bean은 순수 자바 객체(JavaBean) new로 생성하지 않고 객체의 생성, 소멸을 Spring이 관리되도록 하는 것으로 Spring에 의하여 생성되고 관리되는 자바 객체를 의미한다. ( IOC, Inversion Of Control ), Spring BeanIOC에 등록하는 방법은 Java Annotation(@Component..)를 사용하는 방법과 Bean Configuration File에 직접 Bean 등록하는 방법, xml에 등록하는 방법이 있다.