List와 Map의 차이 2편이다.


1편에서는 List에 대해 포스팅 했고,


오늘은 Map에 대해 포스팅한다.


아래는 1편 URL이다.


http://mommoo.tistory.com/33



Map을 이용해 저장할때는 List처럼


뭉텅이로 저장하는것이 아니라, Map에 아이템을 저장할때마다, 빈 공간을 찾아 저장한다.


따라서 List보다는 데이터 저장속도가 느릴 수 있다.  Map의 가장 큰 특징이라면,


쌍을이루는 Key와 Value값을 이용한다는 것이다.


따라서 단순한 포지션(0~10 같은 인덱션)보다는, 저장하고 싶은 데이터가 특별한 Key값을


가질때 Map을 사용하는것이 좋다. 아래의 예시는 자바언어로 작성하였다.



HashMap<String,String> hashMap = new HashMap<>();

hashMap.put("Key1" , " 키값이 Key1인 Value 입니다. ");

hashMap.put("Key2" , " 키값이 Key2인 Value 입니다. ");

hashMap.put("Key3" , " 키값이 Key3인 Value 입니다. ");

hashMap.put("Key4" , " 키값이 Key4인 Value 입니다. ");


System.out.println(hashMap.get("key1");

System.out.println(hashMap.get("key2");

System.out.println(hashMap.get("key3");

System.out.println(hashMap.get("key4");



------------- consol  -----------------


키값이 Key1인 Value 입니다.

키값이 Key2인 Value 입니다.

키값이 Key3인 Value 입니다.

키값이 Key4인 Value 입니다.


위의 예시는 key값을 String으로 데이터도 String으로 작성하였다.


만약 동일한 Key값을 사용하면 기존의 Key값을 가지고 있는 value가 사라지고


후에 저장한 valuse 값이 셋팅이 된다. key만 다르다면 value 값이 중복되도 상관 없다.


Map은 콘솔에 찍힌거와 같이 키값이 의미가 있을때 좋은 자료구조 이다.


ArrayList안에 원하는 데이터를 검색하는 경우에는 0번부터 해당 데이터가 있을때까지


검색을 해야하지만, (원하는 데이터의 index를 모르는 경우) hashMap의 경우는 


key값을 통해서 빠르게 데이터를 검색한다. 


요소의 추가 삭제는 List보다 성능이 나을때가 많다. 따라서, 검색성능은 기본적으로 Map이 좋다.



정리하자면,  Map 은빈번한 검색과, 범위데이터가 아닌 특정 데이터를 순간마다 캐치해야할 때 유리한 자료구조이다. 





'용어정리 > 프로그래밍용어' 카테고리의 다른 글

URL 이란?  (2) 2016.06.14
URI 이란?  (0) 2016.06.13
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26
상수(constant) 와 리터럴(literal)이란?  (16) 2016.01.06

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘 포스팅은 List와 Map에 대해 


비교분석 해보겠다.


상호간의 공통점은 데이터를 저장하는


자료구조 인 점이다.  하지만,


똑같이 데이터를 저장하지만, 데이터를 저장하는 구조는 다르다.


먼저 List는 Memory안의 특정한 동일 공간에 뭉텅이로 저장된다.


내부구현은 배열로 되어 있기 때문이다. 때문에 알맞는 데이터 저장공간만 


있다면 데이터 저장속도는 빠르다. 


또한, 순차적으로 데이터를 저장하므로, 데이터 특징이 


포지션별로 의미가 있을 때 사용하는 것이 좋다. 


아래는 자바로 작성한 예시이다. 


List와 Map의 프로그래밍적으로 개념은 같기때문에 어떤 언어든간에


똑같이 이해하면 된다.



ArrayList<String> arrayList = new ArrayList<>();


arrayList.add("0번 아이템 입니다.");

arrayList.add("1번 아이템 입니다.");

arrayList.add("2번 아이템 입니다.");

arrayList.add("3번 아이템 입니다.");

arrayList.add("4번 아이템 입니다.");

arrayList.add("5번 아이템 입니다.");


int index = 0;

for(String tempItem : arrayList){

  System.out.println((index++)+"번 : " + tempItem);

}


-------------------Consol---------------------------


0번 : 0번 아이템 입니다.

1번 : 1번 아이템 입니다.

2번 : 2번 아이템 입니다.

3번 : 3번 아이템 입니다.

4번 : 4번 아이템 입니다.

0번 : 5번 아이템 입니다.

 

foreach문을 썻지만 , 일반 for문으로 arrayList.get(position); 메서드를 써도 무방하다.


데이터가 6개 필요하므로 배열의 크기가 6을 충족하는 메모리 공간만 있으면


그곳에 배열자체를 저장한다. (JDK 1.7 아래 버전은 디폴트 배열 크기가 10이다.)


consol 출력처럼 포지션별로 의미가 있을때 유리하다.


예를 들어 쇼핑몰 페이지에서  쇼핑몰 아이템들을 화면에 나열 한다고 생각해보자. 


단순히 저장된 아이템 전부를 화면에 나열할 필요가 있으므로, 


순차적으로 저장된 데이터를 순차적으로 화면에 배치시키면 되는것이다.


이러한 경우는 ArrayList가 좋다. 하지만,


ArrayList안에 있는 데이터를 삽입/삭제가 빈번할때, 비효율적인 경우가 있다.


추가는 단순히 ArrayList 내부 배열의 크기를 바꾸고 기존 배열의 데이터를 추가하는데 그치지만,


원하는 포지션(인덱스)의 삽입/삭제는 이야기가 다르다. 


삽입/ 삭제는 해당 포지션 아래의 데이터들을 Copy 해야한다. (새로운 배열을 만든후,


기존 배열의 값을 포지션별로 다시 채워야한다.)


기존 배열의 크기를 늘린후 삽입/삭제 데이터를 처리하고 Copy된 데이터를 다시 붙인다.


따라서 ArrayList의 size가 큰 경우는 많은 양의 요소들을 Copy해야 하므로 내부적으로 성능이


떨어질 수 있는것이다.




정리하자면, ArrayList는 이이템의 빈번한 변경 없이,


데이터를 순차적으로 받고, 특정 데이터가 아닌 원하는 데이터 범위를 순차적으로 표현할때 유리한 자료구조라 볼 수 있다.


반면에, Map 은 다르다. 무엇이 다른지는 다음 포스팅때 이어가겠다.

 





'용어정리 > 프로그래밍용어' 카테고리의 다른 글

URI 이란?  (0) 2016.06.13
List와 Map의 차이 (2)  (0) 2016.04.27
XML 이란?  (9) 2016.01.26
상수(constant) 와 리터럴(literal)이란?  (16) 2016.01.06
Wrapper class(래퍼 클래스) 란?  (0) 2015.12.24

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

 오늘은 XML ( eXtensible Markup Language) 에 대해 포스팅 하겠다.


필자가 XML을 처음 본곳은 안드로이드 프로그래밍을 처음 접했을 때 이다.


안드로이드 프로그래밍은 기본적으로 JAVA언어를 채택하여 기능들 을 JAVA로 


작성을 하지만, 스마트폰화면에 보여지는 View 부분을 xml을 통해 코딩할 수 있다.


이때 당시만 하더라도, xml이 뭔지 모르고 사용했었다. 하지만 xml은 안드로이드 뿐 아니라,


여러방면으로 사용된다.(특히 웹에서 많이 사용된다.)



 XML이 뭔지 알아보자. 


먼저 풀네임을 먼저 해석 해보자. eXtensible Markup Language  => 확장될수 있는 표시 언어


이정도로 해석가능 할 것이다. Markup Language의 예로는 우리가 아는 언어인 HTML이 있다.


XML 과 HTML 로 예를들어 XML을 설명하려고 한다.


같은 Markup Language라, 생긴건 비슷하지만 큰 차이점이 존재한다. HTML의 태그는 이미 약속한 태그들만


사용 가능하다. 예를들어 <h1></h1> => 글자크기를 키우는 태그.   와 같이 이미 만들어서 제공되는 태그만


사용해야 한다. 하지만, XML 태그는 사용자임의로 만들 수 있다. 


그렇다면 XML 태그는 왜 사용자가 임의로 만들게 했는지 생각을 해봐여한다. 


XML는 어떠한 데이터를 설명하기 위해 이름을 임의로 지은 태그로 데이터를 감싼다. 


즉 태그로 데이터 설명을 하는것이다. 이 부분에서 데이터의 표시(Markup)가 되고,


더 필요한 데이터가 생길시 태그추가나, 태그안의 내용을 추가할수 있다는 특징이 있다.(Extensible)


아래의 예를 보자.


<? xml version="1.0"?>

<컴퓨터언어>

<C언어> C       </C언어>

<C언어> C++    </C언어>

<C언어> C#     </C언어>

<JAVA> java     </JAVA>

<JAVA> android </JAVA>

</컴퓨터언어>


컴퓨터언어라는 태그아래 C언어 태그와 JAVA 태그가 있으며 각 태그에 맞는 메타 정보들이 배치되어 있다.


이런식으로 XML은 우리가 필요한 정보들을 받거나 줄 수 있는 데이터형태를 제공해준다.


만약 HTML로 저러한 정보를 작성하려 했다 하면 어떨까? 


C,C++ 과 같은 메타 정보등은 얻을 수 야 있겠지만, 데이터를 설명해주는 정보는 없을 것이다.



 이와 같이 xml은 정보들을 태그로써 마크하여 필요한 내용을 안에 적는 양식이다. 


안드로이드를 해본 사람이라면 안드로이드의 xml도 똑같이 이해해보길 바란다. 이해가 갈 것이다.


위 글을 다 읽을 시간이 없는 독자를 위해 간단하게 정리하자면 아래와 같다.


* 텍스트 기반이며 간결한 데이터형이다.


* 웹에서 디스플레이 표준을 HTML로 한것처럼 데이터의 표준으로 만들기 위한 노력이 있음.


* 마크업언어(HTML)가 아니라 마크업언어를 정의하기 위한 언어이다.


* 자신의 어플리케이션에 적합하게 작성 가능 하다. 

(어플리케이션은 앱을 뜻하는 용어가 아니다. http://mommoo.tistory.com/11 참고.)



'용어정리 > 프로그래밍용어' 카테고리의 다른 글

List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
상수(constant) 와 리터럴(literal)이란?  (16) 2016.01.06
Wrapper class(래퍼 클래스) 란?  (0) 2015.12.24
API란?  (0) 2015.12.17

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee


 상수(constant)리터럴(literal)에 대해 들어본적이 있는가?


만약, 프로그래밍을 어느정도 해왔던 사람이면 한번쯤은 들어봤을만한 용어 들 이다.


하지만 두 용어를 같은 의미로 사용하는 사람들이 많다. 


하지만, 엄연히 따지자면 확실한 차이점이 존재한다.


오늘은 두 용어에 대해 정확한 뜻을 포스팅 하고자 한다. 



상수(Constant)란?



  먼저 상수와 리터럴 둘 다, 변하지 않는 값(데이터)를 의미한다. 


코드적으로 말하자면, 상수는 변하지 않는 변수를 뜻한다.


상수는 숫자만 넣어야 한다고 오해하는 사람들이 많은데,


앞서 말했듯이, 상수는 변하지 않는 변수를 뜻하는 것이다.


즉 상수에 넣는 데이터는 숫자가 올 수 도 있지만,


클래스나 구조체 같이 기본형에서 파생된 객체나 유도형같은 데이터를 넣을 수 있다. 


상수는 데이터가 변하지 않아야 한다고 했다. 그래서 


참조변수를 상수로 지정 할 때, 참조변수에 넣은 인스턴스 안의 데이터 까지도 변하지 않는 줄 착각 할 수 있지만,


참조변수가 상수(참조변수 메모리의 주소값이 변하지 않는다라는 의미)지, 


그 주소가 가리키는 데이터들까지 상수라는 의미가 아니다.


프로그래밍에서 상수를 쓸때는 C,C++,C#은 const , Java는 final 제어자를 쓴다.


Java언어로 예를 들어보자.


즉 Test라는 클래스를 만들었다면, 


final Test t1 = new Test();


t1 = new Test();


는 불가 하지만,


t1.num = 10;


이렇게 클래스 안의 데이터를 변경해도 상관이 없다는 의미이다.



리터럴(Literal)이란?



  리터럴은 데이터 그 자체를 뜻 한다. 


변수에 넣는 변하지 않는 데이터를 의미하는 것이다.


아래의 예제를 보자.


int a = 1;


int 앞에 final를 붙일 시 , a는 상수가 된다. 여기서의 리터럴은 1이다.


즉, 1과 같이 변하지 않는 데이터(boolean, char, double, long, int, etc...)를 리터럴(literal)이라고 부른다.


그렇다면 인스턴스(클래스 데이터)가 리터럴이 될 수 있을까?


답은 아니오다. 만약 인스턴스안에 있는 값들을 변경하지 않는다면 모를까,


보통의 인스턴스는 동적으로 사용하기 위해 작성되므로.


리터럴이 될 수가 없다. 왜냐하면 값이 언제 바뀔지 모르는 것이기 때문이다.


하지만 프로그래밍 에서 객체 리터럴이란 표현을 들어본적이 있을 것이다.


데이터가 변하지 않도록 설계를 한 클래스를 불변 클래스라 칭한다.(immutable class)


해당 클래스는 한번 생성하면 객체 안의 데이터가 변하지 않는다. 변할 상황이면 새로운 객체를 만들어준다.


자바의 String, Color 같은 클래스가 이와 같은 예이다. 


따라서 우리는 "abc" 와 같은 문자열을 자바에서는 '객체 리터럴' 짧게는 '리터럴' 이라고 표현 하는것이다.




여기까지가 준비한 상수와 리터럴의 내용이다. 


정리하자면 상수는 변하지 않는 변수를 의미하며(메모리 위치) 메모리 값을 변경할 수 없다.


리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미한다. 


보통은 기본형의 데이터를 의미하지만, 특정 객체(Immutable class , VO class)에 한에서는 리터럴이 될 수 있다.




'용어정리 > 프로그래밍용어' 카테고리의 다른 글

List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26
Wrapper class(래퍼 클래스) 란?  (0) 2015.12.24
API란?  (0) 2015.12.17

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee



Wrapper class


C++ 이나 JAVA 프로그래밍을 하는 사람이라면 래퍼 클래스를 많이 들어 봤을 것이다.


C++ JAVA의 래퍼 클래스는 간단하게 말하자면, 


기본 자료형(int나 long)같은 데이터를 객체에 넣기 위해 제공하는 함수들 이라고 생각하면 된다.


ex) int num = 5;  -->  Integer num = new Integer(5);


하지만 굳이 말하자면, 자바에서는 AutoBoxing 개념으로, 


Object obj = new Integer(5);     대신에   Object obj = 5; 


이렇게 써도 된다. (JDK 1.5버전 이후)


그렇지만, 자바나 C++ 외에도 래퍼(wrapper)라는 개념이 쓰이는데, 항상 아래와 같은 개념으로 생각하면 되겠다.


래퍼란 필요한 데이터를 받거나 쓰기 위해 데이터 형태를 세팅해 제공하는 서비스 이다.


한가지 예를들자면, url 주소앞에 http://도 래퍼 이다. 래퍼는 이와 같이 프로그래밍 용어로써 다양하게 쓰인다.



'용어정리 > 프로그래밍용어' 카테고리의 다른 글

List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26
상수(constant) 와 리터럴(literal)이란?  (16) 2016.01.06
API란?  (0) 2015.12.17

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee



API 는 Application Programing interface의 약자이다.


프로그래밍을 공부하는 사람이라면 한번쯤은 들어봤을 용어이다.


API의 뜻을 모르고 사용하는 사람도 많을 것이라고 생각한다.


API의 뜻을 설명하기전에 약자를 보면 Applicaiton이 보인다.


Application은 모바일 열풍이 불면서 나온용어라고 착각하는 사람들이 많다.


하지만 Application은 엄연히 컴퓨터 처리에 대상이되는 것들을 총칭해서 말한다.


우리가 하는 PC게임, 우리가 평소에 하는 프로그래밍도 Application이라 불릴 수 있는 것이다.


interface는 어떠한 리소스를 토데로 결과물을 만들거나 도출할때 쉽게 하기위해 도움을 주는존재를 뜻한다.


즉, 합쳐말하면 컴퓨터 처리에 있어서 프로그래밍을 쉽게 하게 해주는 인터페이스(도움을 주는 존재)라고 할 수 있겠다.








'용어정리 > 프로그래밍용어' 카테고리의 다른 글

List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26
상수(constant) 와 리터럴(literal)이란?  (16) 2016.01.06
Wrapper class(래퍼 클래스) 란?  (0) 2015.12.24

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts