Blue Chicken - The Legend Of Zelda
본문 바로가기

개인공부

데이터 타입, 데이터 구조

1. 데이터 타입 (Data Type)

정의:

  • 데이터 타입은 데이터의 성질과 크기를 정의하는 데 사용되는 개념입니다.
  • 프로그램에서 사용할 변수나 값의 종류를 나타냅니다.

역할:

  • 컴파일러가 메모리 크기연산 가능 여부를 결정하도록 도와줍니다.
  • 데이터를 어떻게 다루어야 할지(읽기, 쓰기, 연산 등)를 정의합니다.

종류:

  1. 기본 데이터 타입 (Primitive Data Type):
    • 정수형: byte, short, int, long
    • 실수형: float, double
    • 문자형: char
    • 논리형: boolean
  2. 참조 데이터 타입 (Reference Data Type):
    • 클래스 (String, 사용자 정의 클래스 등)
    • 배열 (int[], String[] 등)
    • 인터페이스 (Runnable 등)
int number = 42;        // 정수형 데이터 타입
double pi = 3.14;       // 실수형 데이터 타입
boolean isActive = true; // 논리형 데이터 타입
String name = "Alice";  // 참조형 데이터 타입

2. 데이터 구조 (Data Structure)

정의:

  • 데이터 구조는 데이터를 저장, 조직, 관리, 접근하는 방식을 정의합니다.
  • 데이터의 구조적인 저장 방식연산 방법에 초점이 맞춰져 있습니다.

역할:

  • 데이터를 효율적으로 저장하고, 검색, 삽입, 삭제, 정렬 등의 연산을 빠르게 수행할 수 있도록 도와줍니다.
  • 데이터의 관계를 나타내거나 처리 방법을 최적화합니다.

종류:

  1. 선형 구조:
    • 배열(Array): 고정 크기, 연속된 메모리
    • 리스트(List): 동적 크기, 연결 리스트(Linked List)
    • 스택(Stack): LIFO(Last In, First Out)
    • 큐(Queue): FIFO(First In, First Out)
  2. 비선형 구조:
    • 트리(Tree): 계층적인 데이터 구조 (예: 이진 트리, 트라이, AVL 트리)
    • 그래프(Graph): 노드와 엣지로 연결된 구조 (예: 인접 리스트, 인접 행렬)
  3. 해시 구조:
    • 해시 테이블(Hash Table): 키-값 쌍으로 데이터를 저장 (예: HashMap)
  4. 집합 구조:
    • 집합(Set): 중복을 허용하지 않는 데이터 구조 (예: HashSet, TreeSet)

데이터 타입

- object

개념

  • Object는 자바의 최상위 클래스입니다. 모든 클래스는 Object를 상속받기 때문에, 모든 타입을 Object로 저장하거나 다룰 수 있습니다.
  • 예를 들어, String, Integer, 사용자 정의 클래스 등은 모두 Object 타입으로 처리할 수 있습니다.

Object 타입의 특징

  1. 모든 데이터 타입을 저장 가능:
    • Object는 어떤 데이터 타입이든 저장할 수 있습니다.
  2. 형변환(Casting) 필요:
    • Object 타입에서 원래 타입으로 데이터를 사용하려면 명시적 형변환이 필요합니다.
Object obj = "Hello";          // 문자열 저장
System.out.println(obj);       // 출력: Hello

obj = 42;                      // 정수 저장
System.out.println(obj);       // 출력: 42

obj = 3.14;                    // 실수 저장
System.out.println(obj);       // 출력: 3.14

Object 타입의 단점

  • 형변환 오류 가능성: 데이터를 저장할 때는 유연하지만, 사용할 때는 형변환 오류가 발생할 수 있습니다.
Object obj = "Hello";
Integer num = (Integer) obj;  // 오류 발생: String을 Integer로 변환할 수 없음

- Generic

개념

  • 제네릭은 자바의 타입 안정성유연성을 동시에 제공하는 문법입니다.
  • 컴파일 타임에 데이터 타입을 지정하여 형변환 문제를 방지할 수 있습니다.
  • 주로 컬렉션(예: ArrayList, HashMap)에서 사용됩니다.

제네릭의 특징

  1. 타입 안정성:
    • 데이터 저장 시, 미리 정해진 타입만 저장할 수 있습니다.
  2. 형변환 불필요:
    • 데이터를 사용할 때 별도의 형변환이 필요하지 않습니다.
  3. 유연성:
    • 여러 타입에 대해 재사용 가능한 클래스나 메서드를 작성할 수 있습니다.

제네릭의 목적:

  1. 타입 안정성: 컴파일 시 타입을 강제하여 잘못된 타입의 데이터를 저장하거나 사용하는 것을 방지.
  2. 코드 재사용성: 데이터 타입에 관계없이 동작하는 일반화된 코드를 작성 가능.
  3. 형변환 불필요: 데이터를 사용할 때 형변환을 하지 않아도 됩니다.

제네릭을 사용하지 않으면, ArrayList는 다양한 타입을 저장할 수 있지만, 데이터를 사용할 때 형변환이 필요합니다.

데이터 구조관련

  • 배열은 다음과 같은 경우에 적합합니다:
    • 같은 타입의 데이터를 저장하며, 크기가 고정된 경우.
    • 성능이 중요한 경우(연속된 메모리로 접근 속도가 빠름).
  • 컬렉션은 다음과 같은 경우에 적합합니다:
    • 크기가 동적으로 변경되어야 하는 경우.
    • 같은 타입뿐 아니라, 다른 타입의 데이터를 함께 저장하고 싶을 때.
    • 추가, 삭제, 검색과 같은 고급 기능이 필요한 경우.

배열, 같은 데이터 타입의 값들을 연속적으로 저장

배열은 같은 데이터 타입의 값들을 연속적으로 저장하는 자료구조입니다.

각 요소는 인덱스를 통해 접근 가능, 인덱스는 0부터 시작

배열의 모든 요소는 메모리상에 연속적으로 저장됩니다.

배열을 선언하고 생성, 생성 시에는 크기를 지정해야함

// 배열 선언
int[] numbers; // 정수형 배열 선언
String[] names; // 문자열 배열 선언

// 배열 생성
numbers = new int[5]; // 정수형 배열 생성 (크기 5)
names = new String[3]; // 문자열 배열 생성 (크기 3)

// 선언과 생성을 동시에
int[] scores = new int[4]; // 크기 4의 정수형 배열 생성
String[] fruits = {"Apple", "Banana", "Cherry"}; // 초기화와 함께 선언

다차원 배열일 경우

int[][] matrix = new int[2][3]; // 2행 3열의 2차원 배열

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6}
};

System.out.println(matrix[0][1]); // 출력: 2 (첫 번째 행, 두 번째 열)
matrix[1][2] = 10; // 두 번째 행, 세 번째 열에 10 저장

컬렉션 - list

다른 데이터 타입의 값들을 저장할 수 있는 자료구조는 generic 이나 object 타입

모든 클래스는 Object 클래스를 상속받기 때문에, Object 타입의 배열을 사용하면 다양한 데이터 타입을 저장할 수 있습니다. 단점은 값 사용시에 원래 타입으 형변환이 필요할 수 있음

Object[] mixedArray = new Object[4];
mixedArray[0] = 42;                // 정수
mixedArray[1] = "Hello";           // 문자열
mixedArray[2] = 3.14;              // 실수
mixedArray[3] = true;              // 논리값

for (Object obj : mixedArray) {
    System.out.println(obj);       // 저장된 값 출력
}

list 인터페이스와 제네릭 사용

Arraylist<Object>를 사용하는 방법

ArrayList는 동적으로 크기를 변경할 수 있는 배열로, 다양한 타입의 데이터를 저장할 수 있다.

import java.util.ArrayList;

ArrayList<Object> mixedList = new ArrayList<>();
mixedList.add(10);             // 정수
mixedList.add("Java");         // 문자열
mixedList.add(4.56);           // 실수
mixedList.add(false);          // 논리값

for (Object obj : mixedList) {
    System.out.println(obj);   // 저장된 값 출력
}

컬렉션 - Map

Map 키-값 쌍으로 데이터를 저장하는 자료구조, 다양한 데이터 타입을 저장하는데 매우 유용

import java.util.HashMap;

HashMap<String, Object> mixedMap = new HashMap<>();
mixedMap.put("age", 25);           // 정수
mixedMap.put("name", "Alice");     // 문자열
mixedMap.put("height", 5.7);       // 실수
mixedMap.put("isStudent", true);   // 논리값

System.out.println(mixedMap.get("name"));      // 출력: Alice
System.out.println(mixedMap.get("height"));    // 출력: 5.7