본문 바로가기

Java152

데이터 베이스 커넥션 객체를 전역변수로 선언한다면? 데이터 베이스 커넥션 해당 글은 데이터베이스 커넥션 풀 (DBCP)에 대해서는 다루지 않습니다. 웹 애플리케이션과 데이터베이스는 서로 다른 시스템이며, 데이터베이스 드라이버를 사용하여 데이터베이스에 연결해야 합니다. 데이터베이스 연결의 생애주기는 다음과 같습니다. 데이터베이스 드라이버를 사용하여 데이터베이스 연결 열기 데이터를 읽고 쓰기 위해 TCP 소켓 열기 TCP 소켓을 사용하여 데이터 통신 데이터베이스 연결 닫기 TCP 소켓 닫기 위와 같이 데이터베이스 연결을 수립하고, 해제하는 과정은 비용이 많이 들어가는 작업입니다. DAO 클래스의 Connection 객체 아래 설명할 코드는 데이터베이스 접근 로직을 담당하는 DAO 클래스입니다. 주의깊게 봐야할 점은 전역변수로 관리하고 있는 Connection.. 2023. 5. 21.
ENUM 활용한 Refactoring - 파일 확장자에 대한 유효성 검사는 어떻게 할까? ENUM 활용한 Refactoring - 파일 확장자에 대한 유효성 검사는 어떻게 할까? > 현재 게시판을 주제로 한 프로젝트를 진행 중에 있습니다. 해당 게시판에서 파일의 업로드 개수는 최대 3개까지 가능합니다. 파일 확장자에 대한 유효성 검사를 진행한다고 가정해봅시다. 업로드 가능한 파일의 확장자는 다음과 같습니다. png, jpeg, bmp, gif, jpg, docs 이러한 요구사항이 있을때, 어떻게 유효성 검사를 하면 좋을지 고민해보았습니다. 다음과 같이 설계한 File 이라는 도메인 객체에서 유효성 검증을 진행했습니다. public class File { private final long FileIdx; private final String FileName; private final long .. 2023. 5. 21.
어떻게 하면 가독성 좋은 코드 코드가 될까? - 원시값을 포장한 도메인 객체 어떻게 하면 가독성 좋은 코드 코드가 될까? - 원시값을 포장한 도메인 객체 게시판을 주제로 한 프로젝트를 진행 중에 있습니다. 요구사항을 분석 후 도메인 객체를 아래와 같이 설계했습니다. public class Board { private final long boardId = 0; private final String category; private final String title; private final String writer; private final String content; private final String password; private final int hit = 0; private final LocalDateTime regDate = LocalDateTime.now(); publ.. 2023. 5. 21.
어떻게 하면 가독성 좋은 코드 코드가 될까? - 빌더 패턴(Builder Pattern) 어떻게 하면 가독성 좋은 코드 코드가 될까? - 빌더 패턴(Builder Pattern) 게시판을 주제로 한 프로젝트를 진행 중에 있습니다. 요구사항을 분석 후 도메인 객체를 아래와 같이 설계했습니다. public class Board { private final long boardId = 0; private final String category; private final String title; private final String writer; private final String content; private final String password; private final int hit = 0; private final LocalDateTime regDate = LocalDateTime.now(.. 2023. 5. 18.
Why Override equals(), hashCode() Method? / 왜 equals, hashCode를 재정의할까? Why Override equals(), hashCode() Method? 일반화하는 것은 아니지만, 대부분의 웹 개발자라면, equals() 메서드를 재정의하는 이유에 대해서 알고 있을 것이다. 이부분에 대해서 정리해보자. Java에서 모든 클래스는 Object 클래스를 상속받는다. Object 클래스의 메서드 중 equals() 메서드가 정의되어 있으며, 이는 모든 클래스가 해당 메서드를 사용할 수 있다는 의미이다. 그렇다면, Object 클래스의 equals() 메서드에 대해서 알고가자. Object Class boolean equals(Object o) 이 메서드는 두 개의 참조 주소를 기반으로 객체가 동일한지 여부를 확인하는 데 사용된다. 두 객체가 동일한 경우 true를 반환하고 그렇지 않으면.. 2023. 5. 13.
전략 패턴(Strategy Pattern) RPG 게임에서의 캐릭터 구현 초기 요구사항은 다음과 같다. 전사의 등장 무기로 Sword(검)을 가진 전사(Warrior)가 존재하며, attack()을 사용해서 공격할 수 있다. 그렇다면, 다음과 같이 클래스를 생성할 수 있을 것이다. SwordWarrior Class void attack() public class SwordWarrior { public void name() { System.out.println("전사입니다."); } public void attack() { System.out.println("검을 휘둘러 공격합니다."); } } public class Application { public static void main(String[] args) { SwordWarrior sword.. 2023. 5. 13.
커맨드 패턴(Command Pattern) 커맨드 패턴(Command Pattern) 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이다. 실행할 기능이 다양하면서도, 변경이 필요한 경우에 클래스를 변경하지 않고, 재사용할 때 유용하게 사용된다. 어떻게 보면 객체 간의 의존관계를 제거할 수 있는 패턴이라고 볼 수 있다. 말로는 어렵다… 직접 구현해보면서 커맨드 패턴을 이해해보자. 요구사항: 우리집에 Siri를 설치하기 당신은 당신만의 Siri를 집에 설치하기로 했다. 당신은 Siri에게 2 종류의 명령을 내릴 수 있다. order 예) 밥솥 켜 undo 예) 밥솥 꺼 우선, 당신이 명령할 수 있는 것은 밥통의 전원을 ON/OFF 할 수 밖에 없다. 클래스 분리 RiceCooker Class .. 2023. 5. 12.
Comparable과 Comparator 인터페이스 Comparable과 Comparator 인터페이스 우선, 사전적인 의미부터 알고가자. Comparable 인터페이스 int compareTo(T o): 해당 객체와 전달된 객체의 순서를 비교함. Java에서는 같은 타입의 인스턴스를 서로 비교해야만 하는 클래스들은 모두 Comparable 인터페이스를 구현하고 있다. 따라서, Boolean을 제외한 래퍼 클래스나, String, Time, Data와 같은 클래스의 인스턴스는 모두 정렬이 가능하다. Comparator 인터페이스 int compare(T o1, T o2): 전달된 두 객체의 순서를 비교함. Comparable 인터페이스와 같이 객체를 정렬하는 데 사용되는 인터페이스이다. 두 인터페이스의 추상 메서드를 구현하는 이유는 오로지 객체를 비교할 .. 2023. 5. 12.
[Java] 집합을 의미하는 Set 인터페이스 Set of Collections Framework Set은 집합이라는 의미를 가진다. 여기서 말하는 집합은 집합 안에 있는 요소들은 순서도 없고, 중복을 허용하지 않는 것을 의미한다. Java 진영에서의 이러한 의미를 가진 클래스를 제공한다. Collections Framework 중 하나인 Set이라는 인터페이스를 제공하며, 이를 구현한 3가지의 클래스를 다음과 같이 제공한다. Hash 알고리즘을 이용한 HashSet 이진 탐색 트리를 사용하여 오름차순 정렬까지 해주는 TreeSet Set에 순서를 부여해주는 LinkedHashSet 언제 Set을 사용하면 좋을까? 순서가 상관없고 중복을 허용하지 않는 상황이라면, 다음과 같은 상황이 될 수 있겠다. 집합 관련 문제로 풀어낼 수 있는 상황일 때 중복 .. 2023. 5. 11.