자바의 Collection, 싱글톤

귤쳥·2022년 6월 30일
0

CS공부를 해보자

목록 보기
3/4
post-thumbnail

Collection

Collection: 데이터의 집합, 그룹

JCF(Java Collections Framework) : 데이터를 저장하는 자료구조와 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것

값을 저장하는 다양한 컨테이너를 상황에 맞게 사용할 수 있게 한다.

특징

  • 동적 메모리 할당

  • List: 순서가 있는목록
    • ArrayList : 단방향 포인터구조 조회 성능 뛰어남
  • Set: 순서가 없고 중복데이터 불허용
  • Map: 모든 데이터는 키와 값이 존재, key중복 불가능
    • HashMap: key,value에 널값 허용, 비동기처리
    • HashTable: key,value에 null값 허용하지 않음, 동기처리

WHY?

다수의 Data를 다루는데 표준화된 클래스들을 제공해줘서 DataStructure을 직접 구현할 필요가 없다.

코드의 재사용이 쉽다.

자바의 특성에 따라 다형성을 가지고 있기 때문에 인터페이스 변수에 필요한 자료구조를 가진 구현체를 선택하여 저장할 수 있다.

(두가지 리스트를 합치는 경우, 비교하는 경우 등등 list로 선언시 활용가능)

Vector와 HashTable

deprecated
https://hpotter1993.tistory.com/49

Singleton 디자인패턴

  • 생성패턴중 하나
  • 전역변수를 사용하지 않고 객체를 하나만 생성하게 하고 어디에서든지 참조하게 한다.
  • 사용이유
    • 추후 해당객체에 접근할 때 메모리 낭비 방지
    • 이미 생성된 인스턴스 이용으로 속도 빠름
public class Singleton {
    //싱글톤 객체를 static 변수로 선언
    private static Singleton instance;
    private int msg;
    
    //외부에서 생성자 호출 막기
    private Singleton(int msg) {
        this.msg = msg;
    }

    //인스턴스를 전달
    public static Singleton getInstance(int msg) {
        if (instance == null) {
            instance = new Singleton(msg);
        }
        return instance;
    }

    public void printMsg() {
        System.out.println(msg);
    }
}

단점

  • 싱클톤 패턴을 구현하는 코드가 많이 필요함
  • 클라이언트가 구체 클래스에 의존
    • new키워드를 사용해 직접 객체를 생성하므로 DIP위반

      DIP : 의존관계 역전원칙 (dependency inversion principle)

      • 추상화에 의존해라 구체화에 의존하면 안된다. →의존성주입
      • 인터페이스에 의존해라 구현 클래스에 의존하면 안된다.
      • 역할에 의존해라 (김태희가 연기하지 않아도 줄리엣역할에 충실해라)
      • MemberRepository m = new MemoruMemberRepository(); →인터페이스와 구현클래스에 동시에 의존 MemberService 클라이언트가 구현클래스를 직접 선택

스프링의 singleton

  • 스프링 컨테이너가 제공되어 싱글톤 패턴을 적용하지 않아도 객체인스턴스를 싱글톤으로 관리
    • 컨테이너가 관리하기에 위와같은 단점 해결

참고자료

https://steady-coding.tistory.com/356

https://gangnam-americano.tistory.com/41

https://www.crocus.co.kr/1553

https://olivejua-develop.tistory.com/66

profile
혼긱 CE의 이제 막 시작하는 코딩

0개의 댓글