POJO란?

|

POJO란

POJO란 Plain Old Java Object의 첫 글 자를 따서 만든 약자다. 간단한 자바오브젝트라는 뜻이다.

그러면 POJO 프로그램이란 무엇인가? 특정 프레임워크의 클래스를 상속하지 않으면 POJO인것인가?단순하게 보면 그냥 평범한 자바 오브젝트라고 할 수 있지만, 좀 더 명확하게 말하면, 적어도 조건을 충족해야 한다.

특정 규약에 종속되지 않는다

POJO는 자바언어와 꼭 필요한 API외에는 종속되지 않아야 한다. 따라서 특정 규약을 따라 비즈니스 컴포넌트를 만들어야 하는 경우는 POJO가 아니다. 또한 특정 클래스를 상속해서 만들어야 하는 규약이 있는 경우도 마찬가지다.

특정 규약을 따라서 만들게 하는 경우는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구한다. 그럴 경우 자바의 단일 상속 제한 때문에 더이상 해당 클래스에 객체지향적인 설계 기법을 적용하기가 어려워지는 문제가 생긴다. 또한 규약이 적용된 환경에 종속적이 되기 때문에 다른 환경으로 이전이 힘들다는 문제점이 있다.

즉 별다른 가치를 주지도 못하는 규약 따위에 종속되지 않아야 하고, 객체지향 설계에서 자유로운 적용이 가능한 오브젝트 여야만 POJO라고 불릴 수 있다.

특정 환경에 종속적이지 않는다

순수한 애플리케이션 로직을 담고 있는 오브젝트 코드가 특정환경에 종속되게 만드는 경우라면 그것 역시 POJO라고 할 수 없다. POJO는 환경에 독립적이어야 한다.

특히 비즈니스 로직을 담고 있는 POJO 클래스는 웹이라는 환경정보나 웹 기술을 담고 있는 클래스나 인터페이스를 사용해서는 안 된다. 설령 나중에는 웹 컨트롤러와 연결되서 사용될 것이 뻔하다고 할지라도 직접적으로 웹 이라는 환경으로 제한해버리는 오브젝트나 API에 의존해서는 안된다. 그렇게 할 경우 웹 의외의 에서는 사용을 할 수가 없다.

그럼 결국 특정환경과 특정규약에 종속되지 않으면, 모두 POJO인가? POJO의 가장 중요한 점은 객체지향적인 자바 언어의 기본에 충실하게 만들어져야 한다.

자바가 객체지향 프로그래밍을 가능하게 해주고, 스프링이 자바의 객체지향프로그래밍을 기반으로 재사용성을 높여준다고 해서, 객체지향에 설계에 맞게 자동으로 적용이 되는게 아니다.

책임과 역할이 각기 다른 코드를 한 클래스에 몰아넣어 덩치 큰 만능 클래스로 만드는 경우, 재사용이 불가능한 정도로 다른 레이어와 영역의 코드와 강한 결합을 가지고 만들어지는 경우, 상속과 다형성의 적용으로 처리하면 되는것을 if/switch문이 가득 찬 길고 긴 메소드로 작성해놓은 경우라면, 과연 그것이 객체지향적인 자바오브젝트라고 할 수 있을까?

결론

  • 거창하게 이야기했지만 결론은 POJO의 정의는 환경과 기술에 종속되지 않고, 객체지향적인 원리에 충실하게 설계된 자바 오브젝트를 말한다.

Comments