모르지 않다는 것은 아는것과 다르다.

객체지향

POJO

채마스 2022. 2. 28. 20:04

POJO 란?

  • Plain Old Java Object 의 약자이다.
  • 마틴 파울러가 위의 이름을 지었는데, 이유는 단순한 개체에 걸맞는 마땅한 이름이 없기 때문이라고 한다.
  • 해석해보면, 오래된 방식의 간단한 자바 오브젝트라는 뜻이다.
  • 객체지향적인 원리에 충실하면서 특정 환경과 규약에 종속되지 않아, 필요에 따라 재사용이 될 수 있는 방식으로 설계된 오브젝트를 말한다.
  • 쉽게 말하면, 특정 기술과 환경에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말한다.
  • Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다.





POJO의 장점

  • 특정 기술과 환경에 종속적이지 않은 코드는 깔끔하다.
  • 자동화된 테스트에 유리하다.
  • 객체지향적인 설계를 자유롭게 적용할 수 있다.
  • 자바의 객체지향적인 특정을 살려서 비즈니스 로직에 충실한 개발이 가능하다.





POJO 가 되기 위한 조건

  • Can't Extend anything -> 어떤 것도 상속을 받으면 안된다. -> 특정 규약에 종속되지 않아야한다.
  • Can't Implement anything -> 어떤 것도 구현하면 안된다. -> 특정 환경에 종속되지 않아야한다.
  • No outside annotation -> 외부로 부터 파생된 애노테이션을 사용하면 안된다.





코드 예시

public class Cat{
    int age;
    String name;
}
  • 위의 코드는 POJO 이다.

  • 어떤것도 상속받고 있지않고, 어떤 것도 구현하고 있지않고, outside 애노테이션 또한 없다. -> 이는 POJO 이다.

  • 아래의 코드는 POJO 일까?

public class Cat extends Animal{
    int age;
    String name;
}
  • 위의 코드는 Animal 을 상속받고 있으므로 POJO가 아니다.
public class Cat implements MakesNoise{
    int age;
    String name;
}
  • 이 또한 인터페이스를 구현하고 있으므로 POJO가 아니다.
@Entity
public class Cat{
    int age;
    String name;
}
  • 위 코드 또한 Hibernate 에 종속적이기 때문에 POJO 가 아니다.



JavaBean vs POJO

  • JavaBean 이면 POJO 일까? -> 맞다.
  • POJO 이면 java bean 일까? -> 아니다.
  • 이렇듯 Beans 는 좀 더 엄격한 규칙을 가지고 있다.
  • JavaBean 이기 위한 조건은 아래와 같다.
    • No-args constructor
    • Properties must be private
    • public getters and setters
    • Must be serializable
  • 위에서 작성했던 Cat 클래스는 POJO 다.
  • 하지만 이를 JavaBean 이 되려면 아래와 같이 코드가 바껴야 한다.
public class Cat implements Serializable{
    private int age;
    private String name;

    public int getAge(){
        return age;
    }

    public void setAge(int age){
        this.age = age;
    }

    public String getName(){
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}



JavaBean vs SpringBean

  • 위에서도 정리 했지만 Java Bean 은 특정 형태의 클래스를 가르키는 뜻으로 사용된다.
  • 예를들어, DTO, VO 가 Java Bean 이라고 할 수 있다.
  • Spring Bean 은 스프링 IoC 컨테이너가 관리하는 Java 객체를 말한다.
  • Java 객체와 다른 점은 없다. 단지 개발자가 관리하는 객체가 아닌 스프링에게 제어권을 넘긴 객체를 말한다.




REFERENCES

'객체지향' 카테고리의 다른 글

디자인 패턴에 함수형 프로그래밍 적용하기  (0) 2022.03.06
다형성  (0) 2022.02.28
디자인 패턴  (0) 2022.02.28
SOLID  (0) 2022.02.28
refactoring  (0) 2022.02.28