자바스크립트가 비활성화 되어있습니다.
자바스크립트가 활성화 되어야 콘텐츠가 깨지지 않고 보이게 됩니다.
자바스크립트를 사용할수 있도록 옵션을 변경해 주세요.
- willbsoon

본문 바로가기
Algorithm&DataStructure/Data Structure

자료구조 - 배열

by willbsoon 2020. 9. 14.

1. 대표적인 자료구조중 하나

자료구조에 대해 정리를 좀 해보고자 한다.

이직시에 반드시 나오는 질문중 하나가 자료구조에 대한 설명이지 않을까? 그리고 알고리즘이나 운영체제 들도?

학과시절에 공부하긴 했지만 지금은 잊어버린것도 많고 다시 정리해가면서 공부를 하고자 한다.

 

 

일단 배열이란 것은 무엇인가?

데이터를 나열하고 각 데이터를 인덱스에 대응하도록 구성한 데이터의 구조

파이썬은 리스트타입이 배열의 기능을 하고있음.

 

여기서 자료구조는 효율화, 추상화, 재사용화가 가능하다.

효율화는 상황에 맞는 자료구조를 사용함으로써 시간적 공간적 효율성을 증대시킬수 있다는 점이다.

추상화는 복잡한 자료, 모듈, 시스템으로부터 핵심적인 개념, 기능을 간추려 낸다는 점이다. 그래서 딱히 언어에 종속적이지 않고 개념을 알면 자료구조의 구현은 일맥상통하다.

마지막으로 재사용성이다. 한번 자료구조를 만들어놓으면 다양한 프로그램 내에서 사용할수 있다는 점이다.

 

 

2. 본론

 1) 배열이 왜 필요할까?

같은 종류의 데이터를 효율적으로 관리하기 위해

같은 종류의 데이터를 순차적으로 저장

- 장점

빠른 접근 가능

- 단점

추가, 삭제가 쉽지 않음

미리 최대길이를 지정해야 함.

 

 

 2) 파이썬에서의 배열

파이썬에서는 list 자료형을 사용해서 배열을 구성할 수 있다.

data = [1, 2, 3, 4, 5]
print (data) 	# [1, 2, 3, 4, 5]

 

 3) 자바에서의 배열

파이썬에서의 배열은 정말 간편하게 구현할수 있다. 하지만 파이썬의 list 자료형은 단순히 배열이라기 보단 더 많은 기능을 제공하고 있지만 더 엄밀히 말하면 C 언어의 array를 살펴봐야 정확한 배열이라고 할 수 있겠다.

하지만 내가 C를 굳이 쓰진 않으니 생략하고 자바에서도 한번 알아보고자 한다. 요즘엔 많은 라이브러리를 제공하기 때문에 굳이 구현할 필요가 있겠냐만 알아가는 차원에서 살펴보자. 사실 배열은 굳이 뭘 만들고 할 필요는 없다.

int[] odds = {1, 3, 5, 7, 9};

String[] weeks = new String[7];
weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
weeks[3] = "목";
weeks[4] = "금";
weeks[5] = "토";
weeks[6] = "일";

String[] weeks = new String[];
// 길이값이 없으므로 컴파일 오류가 발생한다.

 

이런식으로 구현이 가능하다.

 

 

쫌더 low level하게 구현한다면?

public class Main {
    public static void main(String[] args) {
        array();
    }

    static void array(){
        Array a = new Array(10);
        a.add(5);
        a.add(6);
        a.add(7);
        a.add(8);
        a.add(9);
        for(int i=0; i<=a.size();i++){
            System.out.println(a.get(i).orElse("None"));
        }
    }
}

class Array{
    private Object[] a;
    private int front=-1;
    private int size=0;

    public Array(int n){
        a = new Object[n];
    }
    public void add(Object obj){
        a[++front]=obj;
        size++;
    }
    public Object del(){
        size--;
        return a[front--];
    }
    public int size(){
        return this.size;
    }
    public Optional<Object> get(int i){
        return Optional.ofNullable(this.a[i]);
    }

}

굳이 이렇게 하지 않아도 자바에서 제공해주는 Array를 사용하면 좋겟다.

 

 

3. 결론

배열은 간단해서 일단 여기까지만 하기.

 

 

 

 

 

 

 

'Algorithm&DataStructure > Data Structure' 카테고리의 다른 글

자료구조 - Linked List ( 링크드 리스트)  (0) 2020.09.14
자료구조 - 스택  (0) 2020.09.14
자료구조 - 큐(Queue)  (0) 2020.09.14

댓글