컬렉션 프레임워크는 다수의 데이터를 저장하는 클래스들을 다루고 표현하는 방법을 표준화한 체계 또는 구조라고 볼 수있다.

 

말이 어렵지만 결국 프로그래머들의 짐을 덜어주기 위해 고안된 프레임워크다.

 

프로그램을 개발하기 위해서는 대량의 데이터를 안전하게 저장하고 효율적으로 조작할 수 있는 관리 체계가 필요하다.

 

기존의 프로그래머들이 각자 그 구조를 정의해야 했다면 최근의 프레임워크에서는 프로그래머가 작동법만 익히면 사용할 수 있게 만들어 놨다. 이는 작업량을 줄이면서도 프로그램의 퀄리티를 높이는데 기여한다.

 

그 중에서도 가장 일반적인 내용들을 모아서 컬렉션 프레임워크에 구현한 것이다. JDK 에 기본으로 들어가려면 일반적인 사용 가치가 있어야 한다. 그렇지 않으면 외부 라이브러리로 분리하게 된다.

 

자료 구조 (Data Structure)

 

컬렉션 프레임워크를 처음 보면 좀 이해하기 어렵다. 그 자체가 추상적인 개념으로 만들어져 있는 경우, 그 추상적 특징이 일상적이거나 보편적이지 않을 때 설명이 난해해진다. 그런 경우 다시 밑바닥으로 돌아가서 하나씩 개념을 되짚어 봐야한다.

 

컴퓨터의 자료구조는 0과1에서 시작한다. bit 단위 부터 저장하는 것이다.

 

자바의 변수에서 기본 자료형을 다루었다. 정수형은 다음과 같다.

 

1 byte : byte

2 byte : short

4 byte : int

8 byte : long

*자바의 변수

 

자바 튜토리얼 (2-1) 자바의 변수 (정수형)

자바의 변수 시간이다. 변수를 이해하는 순간 컴퓨터에 대해 새롭게 눈을 뜨게 된다. C나 파이썬 자바 어느 프로그래밍 언어에도 변수가 있다. 어느 언어를 배우건 개념을 이해하면 그 다음 배우

digiconfactory.tistory.com

 

만약 지난 1년간 한국의 평균기온을 저장하려면 어떻게 해야 할까? 일단 365일치의 변수가 필요하다. 그럼 이제 365줄에다가 변수를 365개 만들어 준다.

int day1 = 2;
int day2 = 7;
int day3 = 5;

...

int day365 = 4;

그런데 한국에서도 부산의 평균기온이 다르다. 그럼 또 365개를 추가해준다. 이번엔

int PusanDay1 = 5;
int PusanDay2 = 9;
int PusanDay3 = 12;

...

int PusanDay365 = 1;

365줄이 늘어났다. 그런데 올해 또 만들어야 한다. 그러면 또 구분할 수 있는 이름을 만들어서 365개를 넣어야 한다. 한국과 부산이니까 2배인 730개다. 이런식으로 데이터의 수요가 늘어나게 되면 결국은 감당할 수가 없게 된다.

 

다행히 프로그래밍 언어에는 배열이라는 자료형이 있다.

 

자바 튜토리얼 (6-1) 배열 (Array)

먼저 배열의 사전적 정의를 살펴보자. *배열 1) 일정한 차례나 간격에 따라 벌여 놓음. 2) 정보·통신 동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 일. *Array - regular order or arrange

digiconfactory.tistory.com

배열은 0부터 시작하는 인덱스로 같은 크기의 타입에 접근할 수 있는 자료형이다.

 

그러면 일이 쉬워진다. 일단 365일을 만든다

 

int[] temp = new int[365]

365가 코드 1줄에 끝난다.

 

이차원 배열을 쓰면 지역에 대한 문제도 해결할 수 있다.

		int[][] temp = new int[2][365];
		
		System.out.println(temp.length);
		System.out.println(temp[0].length);

*결과값 : 2,365

 

위의 이차원 배열은 365개를 정수형인 배열을 2개 가지고 있다. 배열 인덱스는 0번에서 시작한다. 그러니까 0번은 한국으로 1번은 부산으로 하면 된다. 2,3,4,5 이렇게 숫자를 붙이면 되니까 전국을 다 넣어도 남는다.

 

*여기까지 기본 자료형에서 시작해서 필요에 의해서 이차원 배열을 사용했다.

 

필요라는 것은 더 많은 데이터를 더 정교하게 다루고 표현하기 위한 것이다. 다시 말해 정보처리기술의 발달로 데이타에 대한 공급과 수요가 급격하게 늘어난 것이다.

 

20세기 후반에 태어난 사람들이 아직 데이터의 세계에 적응하지 못하는 것은 당연할지도 모른다.

 

데이터란 건 이전에는 일반 사람들에게 필요가 없었던 일이었다. 소수의 과학자와 통치자들만이 알고있고 다뤄야할 일이었다. 수만년 인류 역사상에서 데이터라는 문제를 처음 만났으니 당연한 일이다. 그것도 요새 말로 아주 큰 '비익데이타' 라는 녀석들이다. 머리가 아프지 않으면 그 사람이 타고난 것이라 생각한다.

 

더 정교한 데이터(More Complicated Data Structure)

 

2000년대에 들어와서 좀더 정교하고 복잡한 데이터 구조가 나타났다. 바로 객체라는 것이다.

 

객체지향 프로그래밍(OOP)은 프로그래밍 언어만의 스킬이 아니라 방대한 내용을 가진 학문이다. 최근에 발달한 학문이라 레퍼런스가 상대적으로 적을 뿐이다. 요새는 AI 관련 학문이 비슷하게 떠오르고 있다. 다시말해 원래 인간이 깊이 생각할 무엇이었던 것들이 IT기술 발전에 힘입어 세상에 나오게 된 것이다.

 

자바의 시작은 1995년이었다. 이제 25주년을 맞았다. 자바의 OOP는 그동안 논란도 있었으나 앞으로도 계속 주류의 자리를 가져갈 것은 확실해 보인다. 그것을 가능케 한 원동력은 순도 100%의 객체지향 프로그래밍을 추구하는 방향성 때문이다.

(역시 한가지만 파야한다. '난 한놈만 패'라고 말하는 영화 대사처럼)

 

사람들과 커뮤니케이션을 하기 위해서는 객체를 단순하게 이해해야 한다.

 

다만 프로그래밍을 하는 두뇌는 추상성을 좋아한다. 그것은 인간 뇌 구조의 특성으로 과학자들의 연구결과가 뒷받침한다. 일반화를 좋아하는 인간의 뇌는 아주 고성능이지만 가끔 어이없는 오류도 일어난다고 한다. 머리가 너무 좋은 천재들의 일반인들에 대한 공감력과 인지력이 떨어지는 것과 비슷한 현상이다.

 

컬렉션 프레임워크에 대한 자료를 검색해보던 중에 문득 그런 생각이 들었다. 자료가 방대한 영어권 자바 커뮤니티의 내용도 신통치 않았다. 왜 그렇게 생각하냐면 이유가 있다.

 

최근에 프로그래밍 자료들의 인기도를 보면 유튜브를 기준으로 잡는다. 사실 유튜브는 기초적인 레슨에 많이 치중되있다. 왜냐하면 유튜브 알고리즘이 대중들이 원하는 것을 보여주려고 하기 때문이다. 가장 기초적인 튜토리얼들은 인기가 많다. 파이썬, 자바스크립트, C언어, 자바 등 우리나라에서는 별 관심도 없는 분야도 영어권에서는 화재가 된다. 일단 인구가 압도적이니까 당연히 차이가 난다. 이런 대중적인(쉽게 말해서 돈이 되는) 분야는 전통적 영미권이나 유럽의 프로그래머들의 강의가 많다.

 

옛 용산의 원어민 강사들 즉, 주류는 백인 미국인들이다. 말빨이 돈이 되는 곳에는 항상 미국인들이 있다.

 

그런데 컬렉션 프레임워크 같이 소외된 분야(?)는 누가 주류냐? 인도인들이다! 그들의 구독자 숫자도 상상을 초월한다. 구독자는 인구 대비니까 인도의 13억명을 생각하면 이해가 된다.

 

이런 생각에는 사상의 갈등도 있겠지만 있는 그대로 세상을 알고 싶은 사람에게는 의미가 있다.

 

서양 주류권 사람들은 유튜브 알고리즘을 잘 이용할줄 안다. 유튜브에서는 기초 튜토리얼을 많이 제공하는 편이고 컬렉션 프레임워크같이 중급자들을 위한 내용은 유료 사이트(udemy 등)로 유도해서 판매한다.

 

반면 인도는 여전히 인구는 많고 대다수에게 교육 여건이 좋지 않기 때문에 웬만한 내용은 무료로 공유하려는게 아닐까 싶다. (케바케도 많다. 이 세상 모두를 하나로 묶을 수는 없다)

 

실제로 인도계열 프로그래머들의 강의를 들으면 놀라울 정도로 친절하고 정교하다. 강사의 컨셉트 이해 범위가 높고 공감력이 좋을 수록 설명이 쉬워진다.

 

물론 유저들중에는 발음이 듣기 어렵다, 거슬린다는 지적이 있지만 이건 어디서 교육을 받았는가의 문제다. 유럽에서 공부한 인도인, 미국에서 공부한 인도인 다들 다르다. 발음지적은 유튜브 댓글에서도 인도인과 서양인간 갈등의 씨앗이 되고 있다. 사실 발음지적이 차별적인 방향으로 흘러가는 것은 다들 알고 있다. 표현을 삼가는 것이지.

 

이런 일들이 일어나고 있지만 한편 많은 서양권 사람들은 유튜브 인도 IT교사들의 실력에 대한 감탄을 쏟아내고 있다. IT교육의 세계의 모습들을 흥미롭게 지켜보고 있다.

 

잡설은 이 정도로 한다. 컬렉션 프레임워크에 대한 영어권 자료를 잘 못찾아서 빡친 마음으로 쓴 글이다.

 

*컬렉션 프레임워크는 자료구조와 알고리즘의 연장선이다.

 

C에서는 링크드 리스트나 스택 등을 직접 구현하여 사용해왔지만 이제 그럴 필요가 없다. 게다가 기존의 자료구조에 객체는 담을 수 없다. 객체를 담기 위해서는 더 복잡하고 정교한 자료구조와 알고리즘을 설계해야 하는데 그 수고를 덜어주는 것이 컬렉션 프레임워크이다.

 

예를 들어 이제 한국의 일평균 기온 같은 자료가 아니라 객체를 저장한다고 해보자. 객체란 것은 세상의 어떤 사물도 사상도 될 수 있다. 추상적인 것도 될 수 있다.

 

아래는 추상클래스 A를 정의한다.

abstract class A{
	int a;
	String b;
	
	public abstract void a();
	public abstract void b();
	public void c() {
		System.out.println("c called");
	}
	public void d() {
		System.out.println("d called");
	}
}

이 추상클래스를 상속한 클래스 B객체의 배열을 저장하는 것은 단순 배열과 링크드 리스크를 구현하는 것보다 훨씬 복잡한 문제가 된다.

 

클래스에는 멤버변수와 메소드가 있고 생성자도 있고 인터페이스를 구현할 때도 있다. 특성이 비슷한 객체를 타입이라고 한다. 이런 복잡한 데이터 타입들을 다루기가 어렵기 때문에 컬렉션 프레임워크에 대한 필요가 생긴다.

 

내용이 방대하기 때문에 이번 튜토리얼 시리즈에서는 몇번에 걸쳐서 다룰 것이다.

 

다음 포스트에서는 컬렉션 프레임워크를 실행하는 튜토리얼을 다룰 것이다.

 

 

*컬렉션 프레임워크 참고사항: 아래 인도의 유튜브 영상들을 참조한다.

 

*DURGA 발음은 좀 별로지만 특유의 열정적 강의가 인상적이다. 댓글에서 발음때문에 싸우고 있음.

유레카 컬렉션스 튜토리얼

 

telusko

JDK Collections

 

Lesson: Introduction to Collections (The Java™ Tutorials > Collections)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for information about new fe

docs.oracle.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band