본문으로 바로가기

KTKO 개발 블로그와 여행 일기

현재위치 :: HOME BLOG CATEGORY SEARCH ARCHIVE TAGS MEDIA LOCATION GUESTBOOK

네비게이션

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
관리자
  • 블로그 이미지
    ktko

    개발을 직업으로 삼고, 여행을 좋아하는 남자의 블로그

    링크추가
  • 글쓰기
  • 환경설정
  • 로그인
  • 로그아웃

Effective Java #3 private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하라

싱글턴은 객체를 하나만 만들 수 있는 클래스다. 싱글턴은 보통 유일할 수 밖에 없는 시스템 컴포넌트를 나타낸다. 창 관리자나 파일 시스템 같은 것들이 그 예다. 그런데 클래스를 싱글턴으로 만들면 클라이언트를 테스트하기가 어려워질 수가 있다. 싱글턴이 어떤 인터페이스를 구현하는 것이 아니면 가짜 구현으로 대체할 수 없기 때문이다. JDK 1.5 이전에는 싱글턴을 구현하는 방법이 두 가지였다. 두 방법 다 생성자는 private로 선언하고, 싱글턴 객체는정적 멤버를 통해 이용한다. 첫 번째 방법의 경우, 정적 멤버는 final로 선언한다. 1234public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {};}..

Effective Java/1장 객체의 생성과 삭제 7년 전

Effective Java #2 생성자 인자가 많을 때는 빌더 패턴 적용을 고려하라

빌더 패턴에 대한 간략한 개념과 코드를 블로그에 포스팅 한 것이 있다. 그 글을 읽고 나서 아래 글을 읽는 것이 더 좋을 듯하여 링크를 남긴다. 디자인 패턴 - 빌더 패턴(Builder Pattern) 정적 팩터리나 생성자는 같은 문제를 갖고 있다. 클라스 안에 인자가 많은 상황에 잘 적응하지 못한다는 것. 아래 Person 클래스가 있다. 이런 클래스에는 어떤 생성자나 정적 팩터리 메서드가 적합할까? 보통 개발자는 아래의 예제 코드와 같이 점층적 생성자 패턴을 적용한다. 필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 하나 받는 생성자를 추가하고, 또 추가하고 계속 추가하여 쌓아 올리는 것처럼 추가하는 것이다. 1234567891011121314151617181920212223242526272..

Effective Java/1장 객체의 생성과 삭제 7년 전

Effective Java #1 생성자 대신 정적 팩토리 메서드를 사용할 수 없는지 생각해 보라

클래스를 통해 객체를 만드는 일반적인 방법은 public으로 선언된 생성자를 사용하는 것이다. 그러나 반드시 알고 있어야 하는 또 하나의 다른 방법은 클래스에 public으로 선언된 정적 팩토리 메서드를 추가하는 것이다. 아래 예제는 기본타입 boolean의 값을 Boolean 객체에 대한 참조로 반환한다. 1234public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;} 클래스를 정의할 때 생성자 대신 정적 팩토리 방식으로 메서드를 제공할 수 있다. 생성자 대신 정적 팩터리 메서드를 사용하면 어떤 장점이 있을까 ? 정적 팩터리 메서드의 장점 첫 번째 장점은, 생성자와는 달리 정적 팩터리 메서드에는 이름(name..

Effective Java/1장 객체의 생성과 삭제 7년 전

디자인 패턴 - 빌더 패턴(Build Pattern)

복잡한 객체의 생성 과정과 표현 방법을 분리하여 동일산 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 빌더 패턴은 팩토리 패턴 또는 추상 팩토리 패턴과 매우 비슷하다. 빌더 패턴도 새로운 객체를 만들어서 반환하는 패턴이긴 하지만 실제 동작 방식은 조금 다르다고 할 수 있다. 빌더 패턴은 생성자에 들어갈 매개 변수가 많든 적든 차례차례 매개 변수를 받아들이고 모든 매개 변수를 받은 뒤에 이 변수들을 통합해서 한번에 사용한다. 아무리 말로 설명해도 왜 필요한지 쉽게 설명할 수 있는 한가지의 예가 있다. 아래 사람의 정보가 있다. 사람 정보에는 이름, 나이, 성별, 핸드폰번호, 주소, 직업 등등이 있는데 객체를 생성할 때 인자의 값을 잘못 주게 된다면 잘못된 정보가 저장될 수 있다. 예를..

자바 디자인 패턴 7년 전

[스프링/Spring] DI를 알기 전에 GenericXmlApplicationContext 대해서

따로 Spring Project를 만든 것이 아니라 Maven Project로 생성해보았다. Maven개념과 하나하나 셋팅해보는 것도 재미랄까.... 중요한 것은 DI가 무엇이고 어떤 개념인지 아는 것이 중요하니 설정 방법에 대해서는 따로 설명하지 않겠다. 예제는 첨부파일에 올려놓겠다. 항상 스프링 책을 보면 XML에 bean에 생성을 해 놓고 메인에서 GenericXmlApplicationContext로 생성된 bean을 가져오는 것을 볼 수 있다. GenericXmlApplicationContext 클래스는 XML로부터 정보를 읽어와 객체 생성과 초기화를 수행하는데, XML 파일이 아닌 자바 설정 코드나 그루비 설정 코드를 이용해 객체 생성 및 초기화를 수행하는 클래스를 제공하고 있다. 아래 사진은 ..

Spring 스프링 7년 전

디자인 패턴 - 팩토리 메서드 패턴(Factory Method Pattern)

팩토리는 공장을 의미한다. 공장은 물건을 생산하는데 객체 지향에서 팩터리는 객체를 생성하는 것을 의미한다. 즉 다시말해서 팩토리 메서드는 객체를 생성 반환하는 메서드를 말한다. 여기에서 패턴이 붙으면 하위 클래스에서 팩터리 메서드를 오버라이딩해서 객체를 반환하게 하는 것을 의미한다. 왜 팩토리 메소드를 사용하냐면 클래스간의 결합도를 낮추기 위해서이다. 팩토리 메소드를 사용하게 되면 직접 클래스를 생성 및 사용하는 것을 방지하고 서브 클래스에 위임하여 보다 효율적인 코드 제어를 할 수 있고, 의존성을 제거할 수 있어 결합도를 낮출 수 있다. 위의 설명을 토대로 설명을 위해 "로봇"과 "로봇을 만들어 내는 공장"을 예로 들어 설명을 하겠다. 로봇 공장이 있다. 로봇 공장에는 태권V로봇, 다간, 그리고 귀여운..

자바 디자인 패턴 7년 전

디자인 패턴 - 템플릿 메서드 패턴(Template Method Pattern)

템플릿 메서드 패턴은 상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화하는 것을 말한다. 코드의 중복을 줄이고, 리팩토링에 유리한 패턴으로 상속을 통한 확장 개발 방법으로써 많이 사용되는 패턴중에 하나이다. 즉 쉽게 말해 프로그램 흐름의 틀을 만드는 것이다. 템플릿 메서드 패턴을 이해하기 위해 먼저 Hook 메서드가 무엇인지 알아보자 훅(갈고리 : hook) 메서드란 ? abstract 키워드를 붙이면 상속 받은 클래스는 반드시 해당 메소드를 구현해야 하지만 abstract 키워드를 붙이지 않고 훅 메소드로 만들면 반드시 구현할 필요가 없다. 상속 받은 클래스에서는 선택적으로 오버라이드할 수 있다. 아래 예제를 보면 speak() 메서드는 추상 클래스에서 구현이 되어 있기 때..

자바 디자인 패턴 7년 전
  • 이전
  • 1
  • ···
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • ···
  • 44
  • 다음

사이드바

NOTICE

  • 전체 보기
MORE+

CATEGORY

  • 분류 전체보기 (308)
    • 일기 (0)
    • 코드 예제 모음 (1)
      • [JAVA] 웹 크롤링 하기 (1)
    • HTML (1)
    • Java 개발 이야기 (33)
    • Spring 스프링 (16)
    • 자바 디자인 패턴 (13)
    • Effective Java (24)
      • 1장 객체의 생성과 삭제 (7)
      • 3장 클래스와 인터페이스 (3)
      • 7장 메서드 (6)
      • 8장 일반적인 프로그래밍 원칙들 (8)
    • Kotlin 코틀린 (10)
    • JavaScript (24)
    • vue.js (0)
    • node.js (2)
    • jQuery (10)
    • Ajax&JSON (7)
    • Android (12)
    • 알고리즘 및 자료구조 (94)
      • 자바로 만드는 자료구조 (4)
      • 정렬 (3)
      • 탐색 (3)
      • 이론 (2)
      • 문제 (82)
    • 보안 (3)
    • IT인터뷰면접질문 (6)
    • 정규표현식 (2)
    • Unix (2)
    • IT이것저것 (20)
    • 맛집 (4)
    • 여행 (10)
      • 호주 (4)
      • 일본 (6)
    • 블로그 TIPS (6)
    • 영어 공부 (8)
      • 영어 문법 (8)
      • 영어 단어 (0)

RECENTLY

  • 최근 글
  • 최근 댓글

최근 글

최근댓글

Trackback

TAG

  • jquery
  • 자바
  • 자바스크립트
  • 알고리즘 문제
  • GoF
  • 알고리즘
  • 코틀린
  • Effective Java
  • 디자인 패턴
  • 백준
  • 백준알고리즘
  • 자바 SOLID
  • 객체지향 solid
  • 이펙티브 자바
  • 백준 알고리즘
MORE+

ARCHIVE

CALENDAR

«   2025/06   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

LINK

VISITOR

오늘
어제
전체
  • 홈으로
  • 방명록
  • 로그인
  • 로그아웃
  • 맨위로
SKIN BY COPYCATZ COPYRIGHT KTKO 개발 블로그와 여행 일기, ALL RIGHT RESERVED.
KTKO 개발 블로그와 여행 일기
블로그 이미지 ktko 님의 블로그
MENU
  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
CATEGORY
  • 분류 전체보기 (308)
    • 일기 (0)
    • 코드 예제 모음 (1)
      • [JAVA] 웹 크롤링 하기 (1)
    • HTML (1)
    • Java 개발 이야기 (33)
    • Spring 스프링 (16)
    • 자바 디자인 패턴 (13)
    • Effective Java (24)
      • 1장 객체의 생성과 삭제 (7)
      • 3장 클래스와 인터페이스 (3)
      • 7장 메서드 (6)
      • 8장 일반적인 프로그래밍 원칙들 (8)
    • Kotlin 코틀린 (10)
    • JavaScript (24)
    • vue.js (0)
    • node.js (2)
    • jQuery (10)
    • Ajax&JSON (7)
    • Android (12)
    • 알고리즘 및 자료구조 (94)
      • 자바로 만드는 자료구조 (4)
      • 정렬 (3)
      • 탐색 (3)
      • 이론 (2)
      • 문제 (82)
    • 보안 (3)
    • IT인터뷰면접질문 (6)
    • 정규표현식 (2)
    • Unix (2)
    • IT이것저것 (20)
    • 맛집 (4)
    • 여행 (10)
      • 호주 (4)
      • 일본 (6)
    • 블로그 TIPS (6)
    • 영어 공부 (8)
      • 영어 문법 (8)
      • 영어 단어 (0)
VISITOR 오늘 / 전체
  • 글쓰기
  • 환경설정
  • 로그인
  • 로그아웃
  • 취소

검색

  • jquery
  • 자바
  • 자바스크립트
  • 알고리즘 문제
  • GoF
  • 알고리즘
  • 코틀린
  • Effective Java

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.