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

2025. 2. 7. 03:05·국비지원교육/[계룡건설] 빅데이터 기반 GreenTech SW개발자

이 카테고리는 국비지원 과정으로 [계룡건설] 빅데이터 기반 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
'국비지원교육/[계룡건설] 빅데이터 기반 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**
상단으로

티스토리툴바