POJO (Plain Old Java Object)
말 그대로 "오래된 방식의 간단한 자바 객체" 이다.
POJO
간단하게 말해서 필드와 Getter, Setter와 같은 기본 기능만을 갖는 기본 객체를 의미한다.
자세히는 특정 "기술"에 종속되 있는 상태로 개발하지 않는 개념을 위해 등장한 언어이다. 종속성으로 인해 시스템 업그레이드, 모듈 교체와 같은 상황에서 많은 불편함이 있었기에 POJO라는 개념이 탄생했다.
(특정 기술 == Framework)
아마 자바 스프링 개발자이기에 해당 내용이 궁금할 것이다.
Spring이 POJO개념을 잘 지킨 프레임워크이기 때문이다.
IOC, DI, AOP 와 같은 개념들이 모두 결합력을 느슨하게 하여 의존성을 낮춤으로써 종속성이 낮아지는 현상이 발생한다.
즉, 위에서 말한 POJO에 가까운 개발이 가능하다는 뜻이다. 그렇다면 왜 POJO가 중요하냐?
특정 기술들이 종속성을 띄우게 되면, 객체지향적인 설계가 힘들거나 불가능한 경우가 발생한다. 그렇다보니 코드의 유지보수와 재사용이 매우 불편해진다. 당연히 모든 개발자라면 객체지향개념의 중요성과 편리함을 알고 있을테니 그러한 개념을 사용하지 못한다는건 매우 불편한 일이 될것이다. 말로만 해서 이해가 안갈테니 코드로 보자!
POJO를 지킨 코드
package com.jpasample.service;
public class POJOClass {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
단순한 Getter, Setter로 POJO의 개념을 매우 잘 지킨 것을 알 수 있다.
POJO를 무시한 코드
public class POJOClass extends UserService{
private String name;
private int age;
@Override
public List<User> findUsers() {
return super.findUsers();
}
}
UserService클래스의 기능을 사용하기 위해 Extends를 받은 코드이다. 이렇게 되면 UserService의 메소드를 사용하기 위해 많은 양의 코드를 리펙토링 해야하며, 코드의 가독성 및 유지보수나 확장 측면에서 어려움이 생길 수 밖에 없다^........
Spring의 POJO개념을 지킨 코드
public class POJOClass{
@Autowired
UserRepository userRepository;
private String name;
private int age;
public void test(){
userRepository.findAll();
}
}
다음과 같이 @Autowired를 활용하여 의존성 주입을 하여 느슨한 결합력을 갖게 되면서, 직접적으로 extends, implements를 하지 않아도 해당 클래스의 메소드에 접근할 수 있게 된다. 이렇게 되면 당연히 POJO를 무시한 코드에 비해 많은 장점이 존재하는데, extends를 하여 직접 메소드를 Override하여 작성하지 않아도 되면서 UserRepository 코드에 변경이 생겨도 같이 변하는 장점이 있다.
POJO 규칙
- 객체지향적인 설계를 하였는가?
- 특정 기술에 종속되어 있지 않은가?
- 테스트가 간편하고 용이한가?
딱 이 세가지만 기억하자.
오늘도 슬기로운 코딩생활 하시길 바라며 !
궁금하신점이나 잘못기재된 점에 대한 피드백은 언제나 감사합니다 :)
'Java' 카테고리의 다른 글
[Java] Enum 이란? 왜 사용할까? - 장점들 (2) | 2023.03.13 |
---|---|
[Java] Optional 에 대한 개념 및 사용법 (0) | 2023.03.10 |
InnerClass 왜 사용할까? (0) | 2023.01.13 |
Java Collection ApI 핵심 정리 (0) | 2023.01.13 |
윤년과 평년을 구별하는 프로그래밍 (0) | 2023.01.13 |