
1. 데이터 타입 (Data Type)
정의:
- 데이터 타입은 데이터의 성질과 크기를 정의하는 데 사용되는 개념입니다.
- 프로그램에서 사용할 변수나 값의 종류를 나타냅니다.
역할:
- 컴파일러가 메모리 크기와 연산 가능 여부를 결정하도록 도와줍니다.
- 데이터를 어떻게 다루어야 할지(읽기, 쓰기, 연산 등)를 정의합니다.
종류:
- 기본 데이터 타입 (Primitive Data Type):
- 정수형: byte, short, int, long
- 실수형: float, double
- 문자형: char
- 논리형: boolean
- 참조 데이터 타입 (Reference Data Type):
- 클래스 (String, 사용자 정의 클래스 등)
- 배열 (int[], String[] 등)
- 인터페이스 (Runnable 등)
int number = 42; // 정수형 데이터 타입
double pi = 3.14; // 실수형 데이터 타입
boolean isActive = true; // 논리형 데이터 타입
String name = "Alice"; // 참조형 데이터 타입
2. 데이터 구조 (Data Structure)
정의:
- 데이터 구조는 데이터를 저장, 조직, 관리, 접근하는 방식을 정의합니다.
- 데이터의 구조적인 저장 방식과 연산 방법에 초점이 맞춰져 있습니다.
역할:
- 데이터를 효율적으로 저장하고, 검색, 삽입, 삭제, 정렬 등의 연산을 빠르게 수행할 수 있도록 도와줍니다.
- 데이터의 관계를 나타내거나 처리 방법을 최적화합니다.
종류:
- 선형 구조:
- 배열(Array): 고정 크기, 연속된 메모리
- 리스트(List): 동적 크기, 연결 리스트(Linked List)
- 스택(Stack): LIFO(Last In, First Out)
- 큐(Queue): FIFO(First In, First Out)
- 비선형 구조:
- 트리(Tree): 계층적인 데이터 구조 (예: 이진 트리, 트라이, AVL 트리)
- 그래프(Graph): 노드와 엣지로 연결된 구조 (예: 인접 리스트, 인접 행렬)
- 해시 구조:
- 해시 테이블(Hash Table): 키-값 쌍으로 데이터를 저장 (예: HashMap)
- 집합 구조:
- 집합(Set): 중복을 허용하지 않는 데이터 구조 (예: HashSet, TreeSet)


데이터 타입
- object
개념
- Object는 자바의 최상위 클래스입니다. 모든 클래스는 Object를 상속받기 때문에, 모든 타입을 Object로 저장하거나 다룰 수 있습니다.
- 예를 들어, String, Integer, 사용자 정의 클래스 등은 모두 Object 타입으로 처리할 수 있습니다.
Object 타입의 특징
- 모든 데이터 타입을 저장 가능:
- Object는 어떤 데이터 타입이든 저장할 수 있습니다.
- 형변환(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)에서 사용됩니다.
제네릭의 특징
- 타입 안정성:
- 데이터 저장 시, 미리 정해진 타입만 저장할 수 있습니다.
- 형변환 불필요:
- 데이터를 사용할 때 별도의 형변환이 필요하지 않습니다.
- 유연성:
- 여러 타입에 대해 재사용 가능한 클래스나 메서드를 작성할 수 있습니다.

제네릭의 목적:
- 타입 안정성: 컴파일 시 타입을 강제하여 잘못된 타입의 데이터를 저장하거나 사용하는 것을 방지.
- 코드 재사용성: 데이터 타입에 관계없이 동작하는 일반화된 코드를 작성 가능.
- 형변환 불필요: 데이터를 사용할 때 형변환을 하지 않아도 됩니다.
제네릭을 사용하지 않으면, 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
'개인공부' 카테고리의 다른 글
| 파일 저장방법, blob으로 db에 직접 저장/path를 이용한 외부경로에 저장 (0) | 2025.02.03 |
|---|---|
| JSX, REACT (0) | 2025.01.09 |
| [JAVA, POSTMAN, ANNOTATION] @RequestBody, @RequestParam 테스트 시 차이점 (1) | 2024.08.15 |
| [mybatis]db와 java에서 필드명이 다를때 (2) | 2024.08.15 |
| [java]제네릭 타입, 여러가지 객체를 담을 수 있는 타입으로 공통적으로 쓰일 response 만들기 (0) | 2024.08.15 |