OCP - 개방폐쇄원칙

정명진·2022년 4월 21일
0

OCP

개방폐쇄원칙이란 클래스와 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다라고 정의할 수 있다.

아래 UserDao 클래스는 DB 연결 방법이라는 기능을 확장하는데 있어서 열려 있다.

UserDao에 전혀 영향을 주지 않고도 얼마든지 기능을 확장할 수 있기 때문이다. 동시에 자신의 핵심 기능 코드는 변화에 영향을 받지 않고 유지할 수 있으므로 변경에는 닫혀 있다고 할 수 있다.



package springbook.user.dao;

import springbook.user.domain.User;

import java.sql.*;

public class UserDao {

    private ConnectionMaker connectionMaker;

    public UserDao(ConnectionMaker connectionMaker) {
        this.connectionMaker = connectionMaker;
    }

    public void add(User user) throws ClassNotFoundException, SQLException {
        Connection con = connectionMaker.makeConnection();
        PreparedStatement ps = con.prepareStatement("insert into users(id, name, password) values(?, ?, ?)");
        ps.setString(1, user.getId());
        ps.setString(2, user.getName());
        ps.setString(3, user.getPassword());

        ps.executeUpdate();

        if(ps!=null)
            ps.close();
        if(con!=null)
            con.close();

    }


    public User findById(String id) throws ClassNotFoundException, SQLException {
        Connection con = connectionMaker.makeConnection();

        PreparedStatement ps = con.prepareStatement("select * from users where id = ?");
        ps.setString(1, id);

        ResultSet rs = ps.executeQuery();
        rs.next();
        User user = new User();
        user.setId(rs.getString("id"));
        user.setName(rs.getString("name"));
        user.setPassword(rs.getString("password"));

        rs.close();
        ps.close();
        con.close();

        return user;
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {


        UserDao userDao = new UserDao(new DConnectionMaker());

        User user = new User();
        user.setId("daum23");
        user.setName("song23");
        user.setPassword("1!!abc");

        userDao.add(user);

        System.out.println(user.getId()+" success");

        User user2 = userDao.findById(user.getId());
        System.out.println("user2.getName() = " + user2.getName());
        System.out.println("user2 = " + user2.getPassword());

    }


}
profile
개발자로 입사했지만 정체성을 잃어가는중... 다시 준비 시작이다..

0개의 댓글