ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA - 2 (변수타입과 컬렉션)
    study/java 2020. 7. 15. 20:50

    변수

     

    - DataType에 따른 구분

    1. 기본형 변수 : 자료의 실제 값을 저장

    2. 참조형 변수 : 값이 저장되어 있는 주소 값을 저장 ( String 등 기본형 변수를 제외한 나머지 )

     

    - 선언 위치에 따른 구분

    1. 멤버 변수 : 클래스 영역에 선언된 변수

         - 인스턴스 변수 : 인스턴스 생성 시에 만들어지는 변수. 인스턴스마다 값이 다름

         - 클래스 변수 : 인스턴스 변수에 static을 붙인 변수. 모든 값이 같음

    2. 지역 변수 : 메소드 내에서 선언되어 메소드 호출 시 생성되고 종료 시 소멸됨.

     

    컬렉션

    자바 컬렉션

     

    1. List : 순서가 있는 데이터의 집합으로 중복을 허용

        - ArrayList : 비동기식. 여러 스레드가 ArrayList를 동시에 작업 가능. 인덱스를 가지고 있어 데이터를 조회할 때 효율적

        - LinkedList : 링크를 통해 데이터를 연결하기 때문에 삽입, 삭제를 할 때 효율적임. 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 사용됨.

         - Stack : FILO(First In Last Out) 구조의 컬렉션

         - Vector : ArrayList와 비슷하나 ArrayList와는 달리 동기화를 보장하기 때문에 한 스레드가 Vector 작업 중이면 다른 스레드가 Vector를 보유할 수 없음.

     

    2. Set : 순서가 없는 데이터 집합(LinkedHashSet 제외)으로 중복이 허용되지 않음.

         - HashSet : List와 Map과 달리 순서가 없다.

         - LinkedHashSet : 순서가 있는 HashSet

         - TreeSet : 이진 탐색 트리로 데이터를 저장하는 컬렉션. 데이터 추가/삭제는 오래걸리지만 탐색은 빠름.

     

    3. Map : Key:Value 형태의 자료구조

         - HashMap : HashTable보다 빠르며 동기화를 보장하지 않는다.

         - LinkedHashMap : 입력한 순서대로 데이터를 저장한다.

         - TreeMap : 이진 탐색 트리로 데이터를 저장하는 컬렉션. Key를 기준으로 오름차순

         - HashTable : HashMap보다 느리지만 동기화가 보장된다. 

     

    컬렉션을 사용하는 이유

    1. 다수의 Data를 다루는데 표준화된 클래스들을 제공해주기 때문에 직접 Data Structure를 직접 구현하지 않고 편하게 사용할 수 있음

    2. 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않으므로 상황에 따라 객체의 수를 동적으로 정할 수 있고 공간적인 효율도 높여줌.

     

    ArraysList vs LinkedList

    1. ArraysList는 값이 메모리에 저장될 때 한 지역에 모여서 저장되는 반면 LinkedList는 어디에 저장이 되는지 보장하지 않음

    2. ArraysList는 조회, LinkedList는 갱신, 삭제에 효율적이다.

    ArrayList vs LinkedList

     

    제네릭

     : 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 방식 ( Type Safe )

    public class GenericExample<T> {
    	public T info;
    }
    
    //T에 String과 StringBuilder를 넣어 외부에서 타입을 지정해주었다.
    GenericExample<String> genericString = new GenericExample<>();
    GenericExample<StringBuilder> animalStringBuilder = new GenericExample<>();

    제네릭을 사용하는 이유는 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.

    장점

    1. 컴파일 시에 미리 타입을 체크해서 에러를 사전에 방지

    2. 타입 변환을 제거. 비제네릭 코드는 불필요하게 타입 변환을 하기 때문에 성능에 악영향을 미침

     

     

    Wrapper Class

     : primitive data type을 객체로 변환시키는 클래스

    Wrapper 클래스는 산술 연산을 위해 정의된 클래스가 아니므로 인스턴스에 저장된 값을 변경할 수 없다.

    단지 값을 참조하기 위해 새로운 인스턴스를 생성하고 생성된 인스턴스의 값만을 참조할 수 있다.

    박싱과 언박싱

    - 박싱 : 기본 타입 -> Wrapper 클래스의 인스턴스로 변환

    - 언박싱 : Wrapper 클래스의 인스턴스에 저장된 값 -> 기본 타입의 데이터로 변환

     

     

    사진 출처:

    자바 컬렉션

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

     

    [JAVA] Java 컬렉션(Collection) 정리

    [JAVA] Java 컬렉션(Collection) 정리 ■ Java Collections Framework(JCF) Java에서 컬렉션(Collection)이란 데이터의 집합, 그룹을 의미하며 JCF(Java Collections Framework)는 이러한 데이터, 자료구조인 컬..

    gangnam-americano.tistory.com

    ArrayList vs LinkedList

    https://medium.com/@govinda_raj/arraylist-vs-linkedlist-f8c5099153b5

     

    ArrayList vs LinkedList

    LinkedList and ArrayList are two different implementations of the List interface.

    medium.com

    박싱과 언박싱

    https://junhyunny.blogspot.com/2019/03/wrapper-boxing-unboxing.html

     

    Wrapper 클래스 Boxing / Unboxing

    초급 개발자가 공부한 내용을 정리하는 블로그입니다.

    junhyunny.blogspot.com

     

    'study > java' 카테고리의 다른 글

    [JAVA] Try-with-resources  (0) 2020.07.30
    JAVA - 5  (0) 2020.07.20
    JAVA - 4 ( 객체지향 )  (0) 2020.07.16
    JAVA - 3  (0) 2020.07.16
    JAVA - 1 ( JAVA 기초 )  (0) 2020.07.13
Designed by Tistory.