**[계룡건설] GreenTech SW개발자 - JAVA 학습 노트 .5**

2025. 2. 7. 03:05·국비지원교육/[계룡건설] 빅데이터 기반 GreenTech SW개발자
목차
  1. 싱글톤 패턴이란?
  2. 1. 싱글톤 클래스 구현
  3. 사용 예시
  4. 2. 다른 클래스에서 싱글톤 패턴 활용
  5. ShopService 클래스
  6. 사용 예시
  7. 3. 로그인 서비스 예제
  8. 사용 예시
  9. 4. 다형성을 활용한 Printer 클래스
  10. 사용 예시
  11. 5. 은행 계좌 관리 시스템
  12. Account 클래스
  13. BankApplication 클래스
  14. 개선할 점
  15. 마무리

이 카테고리는 국비지원 과정으로 [계룡건설] 빅데이터 기반 GreenTech SW개발자 과정에서 학습하는 내용을 정리하는 공간입니다.


Java 싱글톤 패턴 예제 정리

싱글톤 패턴이란?

싱글톤(Singleton) 패턴은 애플리케이션에서 단 하나의 객체만 생성되도록 보장하는 디자인 패턴이다. 주로 설정 정보, 데이터베이스 연결, 로깅 등에서 사용된다.

1. 싱글톤 클래스 구현

public class Singleton {
    private static Singleton singleton = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return singleton;
    }
}
  • private static 변수로 단 하나의 인스턴스를 생성하고, 외부에서 접근할 수 없도록 private 생성자를 사용한다.
  • getInstance() 메서드를 통해 유일한 객체를 반환한다.

사용 예시

Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();

if (obj1 == obj2) {
    System.out.println("같은 싱글톤 객체");
} else {
    System.out.println("다른 싱글톤 객체");
}

출력 결과:

같은 싱글톤 객체

obj1과 obj2가 같은 객체임을 확인할 수 있다.

2. 다른 클래스에서 싱글톤 패턴 활용

ShopService 클래스

class ShopService {
    private static ShopService shopService = new ShopService();

    private ShopService() {}

    public static ShopService getInstance() {
        return shopService;
    }
}
  • ShopService도 싱글톤 패턴을 활용하여 유일한 인스턴스를 제공한다.

사용 예시

ShopService service1 = ShopService.getInstance();
ShopService service2 = ShopService.getInstance();

if (service1 == service2) {
    System.out.println("같은 ShopService 객체");
} else {
    System.out.println("다른 ShopService 객체");
}

출력 결과:

같은 ShopService 객체

3. 로그인 서비스 예제

class MemberService {
    boolean login(String id, String password) {
        return "hong".equals(id) && "12345".equals(password);
    }

    void logout(String id) {
        System.out.println(id + "님이 로그아웃 되었다.");
    }
}
  • login() 메서드는 id와 password가 일치할 경우 true를 반환한다.
  • logout() 메서드는 로그아웃 메시지를 출력한다.

사용 예시

MemberService memberservice = new MemberService();
boolean result = memberservice.login("hong", "12345");
if (result) {
    System.out.println("로그인 성공");
    memberservice.logout("hong");
} else {
    System.out.println("로그인 실패");
}

출력 결과:

로그인 성공
hong님이 로그아웃 되었다.

4. 다형성을 활용한 Printer 클래스

class Printer {
    public void println(int a) { System.out.println(a); }
    public void println(String a) { System.out.println(a); }
    public void println(double a) { System.out.println(a); }
    public void println(boolean a) { System.out.println(a); }
}
  • println() 메서드를 오버로딩하여 다양한 데이터 타입을 출력할 수 있도록 구현했다.

사용 예시

Printer printer = new Printer();
printer.println(10);
printer.println(true);
printer.println(5.7);
printer.println("홍길동");

출력 결과:

10
true
5.7
홍길동

5. 은행 계좌 관리 시스템

Account 클래스

class Account {
    private static Account account = new Account();
    private int balance;
    private static final int MIN_VALUE = 0;
    private static final int MAX_VALUE = 1000000;

    private Account() {}

    public static Account getInstance() {
        return account;
    }

    public void setBalance(int balance) {
        if (balance >= MIN_VALUE && balance <= MAX_VALUE) {
            this.balance = balance;
        }
    }

    public int getBalance() {
        return balance;
    }
}
  • getInstance()를 통해 단 하나의 Account 객체를 생성하고 관리한다.
  • setBalance() 메서드는 유효한 범위 내에서 잔액을 설정한다.

BankApplication 클래스

class BankApplication {
    public static void main(String[] args) {
        Account account = Account.getInstance();
        account.setBalance(10000);
        System.out.println("현재 잔고: " + account.getBalance());
    }
}

출력 결과:

현재 잔고: 10000

개선할 점

  1. 스레드 안전한 싱글톤 구현
    • synchronized 키워드를 활용하거나 이른 초기화(Eager Initialization) 대신 지연 초기화(Lazy Initialization) 기법을 사용할 수 있음.
    • volatile 키워드를 활용한 더블 체크 락킹(Double-Checked Locking) 방식 고려 가능.
  2. 로그인 서비스 개선
    • id와 password 비교 시 == 연산자 대신 .equals() 메서드 사용.
    • 예외 처리를 추가하여 안정성 향상 가능.
  3. Account 클래스 리팩토링
    • static 변수를 인스턴스 변수로 변경하여 개별 계좌 관리 가능하도록 수정.
    • balance 초기값 설정 및 입출금 기능 향상.

마무리

이 예제에서는 싱글톤 패턴을 활용하여 객체를 하나만 유지하는 방법을 학습했다. 또한, MemberService, Printer, Account 등의 클래스를 통해 객체 지향적인 설계를 적용해 보았다. 앞으로 개발할 때 싱글톤이 필요할 경우, 다양한 방식으로 최적화하여 사용할 수 있다.

'국비지원교육 > [계룡건설] 빅데이터 기반 GreenTech SW개발자' 카테고리의 다른 글

**[계룡건설] GreenTech SW개발자 - CSS 학습 노트 .1**  (0) 2025.02.17
**[계룡건설] GreenTech SW개발자 - HTML 학습 노트 .3**  (0) 2025.02.17
**[계룡건설] GreenTech SW개발자 - HTML 학습 노트 .2**  (0) 2025.02.16
**[계룡건설] GreenTech SW개발자 - HTML 학습 노트 .1**  (0) 2025.02.16
**[계룡건설] GreenTech SW개발자 - JAVA 학습 노트 .4**  (0) 2025.02.04
  1. 싱글톤 패턴이란?
  2. 1. 싱글톤 클래스 구현
  3. 사용 예시
  4. 2. 다른 클래스에서 싱글톤 패턴 활용
  5. ShopService 클래스
  6. 사용 예시
  7. 3. 로그인 서비스 예제
  8. 사용 예시
  9. 4. 다형성을 활용한 Printer 클래스
  10. 사용 예시
  11. 5. 은행 계좌 관리 시스템
  12. Account 클래스
  13. BankApplication 클래스
  14. 개선할 점
  15. 마무리
'국비지원교육/[계룡건설] 빅데이터 기반 GreenTech SW개발자' 카테고리의 다른 글
  • **[계룡건설] GreenTech SW개발자 - HTML 학습 노트 .3**
  • **[계룡건설] GreenTech SW개발자 - HTML 학습 노트 .2**
  • **[계룡건설] GreenTech SW개발자 - HTML 학습 노트 .1**
  • **[계룡건설] GreenTech SW개발자 - JAVA 학습 노트 .4**
알뜰한대학생
알뜰한대학생
  • 알뜰한대학생
    ALT-LOG
    알뜰한대학생
  • 전체
    오늘
    어제
    • 분류 전체보기 (20)
      • TIL(Today I Learn) (0)
      • Coding Test (0)
        • programmers (0)
        • Baekjoon (0)
      • 국비지원교육 (14)
        • [계룡건설] 빅데이터 기반 GreenTech SW.. (13)
        • 관제시스템 GUI 구현을 통한 자바(JAVA)프로.. (1)
      • [혼공스]혼자 공부하는 자바 스크립트 (6)
        • 혼공학습단 숙제 (6)
      • 자격증 (0)
        • 정보처리기사 (0)
        • SQLD (0)
        • 빅데이터분석기사 (0)
        • 데이터분석준전문가 (0)
        • 웹디자인기능사 (0)
        • OCJP (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
알뜰한대학생
**[계룡건설] GreenTech SW개발자 - JAVA 학습 노트 .5**
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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