[CS스터디]Day 26

DaramGee·2024년 5월 2일

Study

목록 보기
12/20

일시 : 2024.05.02 14:00~14:30

Wrapper클래스가 무엇인지, 사용하는 이유

Wrapper 클래스는 프로그래밍에서 기본 데이터 유형(예: int, float, char 등)을 객체로 감싸는 클래스를 말합니다. 이러한 클래스들은 기본 데이터 유형을 객체로 다룰 수 있도록 하며, 객체 지향 프로그래밍에서 유용하게 활용됩니다. 주로 다음과 같은 이유로 사용됩니다:

1) 객체 지향 환경과의 호환성: 객체 지향 프로그래밍에서는 모든 것을 객체로 취급합니다. 그러나 기본 데이터 유형은 객체가 아니기 때문에, 이러한 기본 데이터 유형을 객체로 다루어야 할 때 Wrapper 클래스를 사용합니다.
2) 제네릭 프로그래밍: 제네릭 클래스나 메서드에서는 다양한 유형의 데이터를 처리해야 합니다. 이때 Wrapper 클래스를 사용하여 다양한 데이터 유형을 객체로 감싸서 처리할 수 있습니다.
3) 메서드 호출 및 컬렉션 사용: 일부 API에서는 객체만을 요구하며, 기본 데이터 유형을 사용할 수 없는 경우가 있습니다. Wrapper 클래스를 사용하여 기본 데이터 유형을 객체로 변환하여 이러한 메서드를 호출하거나 컬렉션에 저장할 수 있습니다.
가장 일반적으로 사용되는 Wrapper 클래스에는 다음과 같은 것들이 있습니다:

Integer, Float, Double, Long: 정수 및 부동 소수점 숫자를 감싸는 데 사용됩니다.
Character, Boolean: 문자와 부울 값을 감싸는 데 사용됩니다.
Wrapper 클래스는 기본 데이터 유형과 관련된 다양한 유틸리티 메서드를 제공하며, 객체의 속성과 메서드를 활용하여 데이터를 다루는 데 유용합니다.

배열과 링크드리스트의 차이점?

배열과 링크드 리스트는 데이터를 저장하고 조작하는 데 사용되는 두 가지 기본적인 자료 구조입니다. 그러나 그들 간에는 몇 가지 중요한 차이점이 있습니다.

구조:
배열(Array): 연속된 메모리 공간에 요소를 순차적으로 저장합니다. 각 요소는 인덱스를 사용하여 직접 접근할 수 있습니다.
링크드 리스트(Linked List): 각 요소는 데이터와 다음 요소를 가리키는 링크(포인터)로 이루어진 노드로 구성됩니다. 노드들이 메모리 여기저기에 분산되어 있고, 다음 요소를 찾기 위해 각 노드의 링크를 통해 이동해야 합니다.

삽입과 삭제 연산:
배열: 요소의 추가나 삭제가 비효율적입니다. 특히 중간에 요소를 추가하거나 삭제할 때, 해당 위치 이후의 모든 요소를 이동해야 합니다.
링크드 리스트: 요소의 추가나 삭제가 효율적입니다. 특히 리스트의 시작 또는 끝에 요소를 추가하거나 삭제할 때, 단순히 링크를 조정하면 되므로 O(1)의 시간 복잡도를 가집니다.

저장 공간:
배열: 요소들은 연속된 메모리 공간에 저장되므로 메모리 사용이 효율적입니다. 그러나 크기가 고정되어 있어 동적으로 크기를 조정하기 어렵습니다.
링크드 리스트: 요소들이 분산되어 있으므로 각 노드는 다음 노드를 가리키는 포인터를 추가로 저장해야 합니다. 따라서 배열보다 더 많은 메모리를 사용합니다.

접근 시간:
배열: 인덱스를 사용하여 요소에 직접 접근할 수 있으므로 O(1)의 접근 시간을 가집니다.
링크드 리스트: 특정 위치의 요소에 접근하려면 첫 번째 노드부터 순차적으로 따라가야 하므로 O(n)의 접근 시간을 가집니다.
배열과 링크드 리스트는 각각의 장단점을 가지고 있으며, 어떤 상황에서 가장 적합한지는 사용하는 문제의 특성과 요구 사항에 따라 다릅니다.

코드 :
Array

// 2차원 배열 생성
int[][] matrix = new int[3][3]; // 3x3 크기의 2차원 정수형 배열 생성

// 2차원 배열 요소 접근 및 할당
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[1][0] = 4;
matrix[1][1] = 5;
matrix[1][2] = 6;
matrix[2][0] = 7;
matrix[2][1] = 8;
matrix[2][2] = 9;

// 2차원 배열 요소 출력
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

Linked List

// 노드 클래스
class Node {
    int data;
    Node next;

    Node(int data) {
        this.data = data;
        this.next = null;
    }
}

// LinkedList 클래스
class LinkedList {
    Node head;

    // LinkedList 맨 뒤에 노드 추가
    void append(int data) {
        Node newNode = new Node(data);

        if (head == null) {
            head = newNode;
            return;
        }

        Node last = head;
        while (last.next != null) {
            last = last.next;
        }

        last.next = newNode;
    }

    // LinkedList 노드 출력
    void printList() {
        Node currNode = head;

        System.out.print("LinkedList: ");
        while (currNode != null) {
            System.out.print(currNode.data + " ");
            currNode = currNode.next;
        }
        System.out.println();
    }
}

// LinkedList 사용 예시
LinkedList list = new LinkedList();
list.append(1);
list.append(2);
list.append(3);
list.append(4);
list.printList();

스터디 현황

0개의 댓글