오늘은 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

오늘은 자바의 익명클래스(Anonymous Class) 혹 무명클래스 에 관해 포스팅을 할 것이다.


익명클래스는 말 그대로 익명의 성질을 가진 클래스라는 뜻이다. 즉 이름이 없는 클래스라고 불리우는데,


'이름이 없는' 이란 의미를 잘 생각해봐야 한다. 아래의 예시를 보자.


public class Test{
    private int num = 1;
    public int getNum(){
        return this.num;
    }
    public void setNum(int num){
        this.num = num;
    }
}

Test란 클래스이다. 멤버변수 num 을 private로 접근을 제어한 후,


게터와 세터로 멤버변수를 접근할 수 있도록 만들었다.



    Test t1 = new Test();

평상시 처럼 인스턴스를 사용할땐 위와 같이 사용한다. 


여기서의 인스턴스 (new Test())는 클래스 이름 'Test'라고 불리운다.


즉 우리가 노말하게 쓰는 인스턴스는 '이름이 있는 클래스' 인것이다.


그렇다면 '이름이 없는 클래스'는 무엇을 의미하는 것 일까? 


위에서 설명한 이름이 있는 클래스의 반대 경우이다. 


즉 Test와 같은 클래스이름 자체가 없는 클래스를 의미한다. 아래의 예시를 보자.


     Test t1 = new Test(){
         public int num = 10;
         @Override
         public int getNum(){
             return this.num;
         }
     };                

바로 위의 소스코드랑은 비슷하면서도 다른점이 있다. 다른점은 인스턴스 옆에 블럭이 있다는 점이겠다.


언뜻 보면 new Test()라는 소스코드 때문에 이 인스턴스는 Test의 이름을 가질 것 같지만,


결코 아니다. 이 인스턴스야 말로 정말 어떠한 이름도 없는 인스턴스 인 것이다.


해당 주장이 맞는 주장인지 근거를 제시해보겠다.


먼저, 해당 인스턴스의 블럭안에는 @Override 어노테이션 주석이 존재한다. 즉, 원래의 Test 클래스에


존재하던 getNum 메서드가 아닌 재정의된 메서드 인점,


또한, 이 인스턴스의 this.num을 출력했을 경우 10이 나온다는 점이다. 


오히려 이 인스턴스는 Test 클래스를 상속받은 클래스라고 바꿔 말해도 될 것이다. 


평소에 자바언어를 사용하는 사용자라면, 상속을 어떻게 쓰는지 알 것이다.


클래스명 extends 상속받을 클래스     구조로 사용하는데 위의 소스 코드는 클래스명이 존재 하지 않고


무명의 어떠한 클래스가 부모클래스로 부터(Test) 상속을 받은 인스턴스 인 것이다.


즉 이름이 없으므로 생성자를 선언 할 수도 없는것이다.


왜 이름이 없는 클래스라고 불리우는지 감이 잡히는가?



익명클래스에 대해 간단하게 알아보았다. 현재 함수형 프로그래밍이 유행하고 있다.


자바에서는 함수를 일급객체로 취급하지 못하지만, 위에서와 같이 익명클래스를 사용하면


메서드 자체는 못넘기되 메서드를 감싼 익명클래스를 넘길 수 는 있다. 


즉, 익명클래스로 자바도 함수형 프로그래밍 흉내를 낼 수 있다고 생각한다.



'Java' 카테고리의 다른 글

JAVA Static이란?  (2) 2016.03.29
자바 enum 열거형  (0) 2016.01.27
JAVA의 삼항연산자  (4) 2015.12.11
JAVA의 생성자 (2)  (2) 2015.11.17
JAVA의 생성자 (1)  (0) 2015.11.12

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

Buy me a coffeeBuy me a coffee

제이쿼리로 이미지 슬라이더를 만들어보자. 완성 결과물은 아래 동영상과 같다.




디자인은 신경쓰지 않았다, 원형 이미지가 왼쪽,오른쪽 버튼을 누를 시 이동하며 커지는 형식의 슬라이더이다. 


간단한 네비게이션도 제공하게끔 만들었다.(이미지 아래의 원형 index와 해당 이미지의 title)


이미지 슬라이더를 만들기 앞서, css와 html부터 살펴보자.


    


body 태그는 아래의 내용을 작성한다.


    


위의 태그까지 빠짐 없이 적었다면, 헤더(빨간색), 내용이 들어갈 컨테이너(파란색),

푸터(노란색), 푸터안에있는 네비게이션 공간(초록) 이렇게 4개로 공간이 분할된 걸 볼 수 있다.


태그를 동적으로 사용하기 위해 <div> 태그로 분할을 하였으며, 앞으로도 


동적 태그는 div태그만을 쓸 예정이다. css를 설명하자면, body 태그안에 있는 div 태그들의 class이름


에 맞춰 스타일을 정의 한 것이다. class이름을 쓸때는 css에 .(클래스이름) id이름을 쓸때는 #(id이름) 이렇게


접근하면 되겠다. 다음 포스팅에서 계속 이어 나가겠다.




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

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

+ Recent posts