'안드로이드 (자바)' 카테고리의 다른 글

안드로이드 App 구조  (0) 2011.08.04
자바 (Java) 객체지향  (0) 2011.08.02

설정

트랙백

댓글


1. 안드로이드 프로젝트를 만든다는 것은?

    main() 함수 (infinite looper와 Queue)를 자동으로 만들어 주며, 이 main함수는 프로젝트에 보이지 않는다.
    ; Activity와 사용자 class들만 작업하는 것이라고 보면 된다.

2. Androidmaifestt.xml
   →  에 Activiy, intent-filter 등을 등록하고, 어떤 Activity가 Main launch인지를 구성한다.
        * intent의 경우 install할때 PM(package manager가 intent를 시스템에 등록해 준다)

3. Layout이나, resource를 장만해야 한다. 
   →  Layout에 콘트롤들을 늘어 놓는데, 이때 @+id 를 이용해서 id를 추가하게 된다. 
        이때 +의 의미는 +가 있어야 R class에 등록을 해 준다. 


     → 이것은 Class R에 ID들이 생성되는데, 이런 Layout은 각각의 ID번호를 직접 갖게 된다.


  → 이런 생성된 resource들을 필요한 Activity에서 onCreate()에서 확보하게 되는데, 이는 다음과 같다. 결국 R.lauout.main을 등록하게 되면 R.id.을 이용해서 control을 가져올 수 있다. 
     한마디로 R.java에 ID가 생성된 것들은 말이지, 실행될때 이미 객체로서 활동한다는 의미 또는 class로서의 의미를 이미 갖추고 있다는 의미로서 자신 들이 control 당할 method들을 이미 가지고 있다.


4. 자, 그러면 재미있는 것은 뭐냐 하면, 뭐든지 개별 아이템에 대한 Adapter를 설정후에, 그것을 전체 View에다가 set한다는 재미있는 설정이다. 
    ; 게다가 control(view)에다가 Listener도 건다는 재미있는 설정이다. 그러니까 결국에는 모든 것은 Activity안에 있는 view 안에다가 뭔가를 건다는 설정인 것다. 
    ; 아래 코드는 하나의보여지는 list에다가 Array Adapter를 걸고, Edit view에다가 keydown listener를 걸었다는 설정이다.
  


5. Listener에 대한 이야기
  
→ Listener를 거는 것도 재미있다.
        원래는 요렇게 Mylistner를 만들어서 추가해줘야 되는데,
      


    어차피 안쓸거 ananymous로 직접 넣어버리는 테크닉을 쓰기도 한다.
      



'안드로이드 (자바)' 카테고리의 다른 글

Web View를 이용한 유투브 런처  (0) 2011.08.07
자바 (Java) 객체지향  (0) 2011.08.02

설정

트랙백

댓글


() 객체지향 개념의 등장배경
   - 객체지향이 아니면 전체 코드를 이해하고 해야되니까 생산성 향상의 측면에서라도 객체지향을 하게되면 유지보수 비용이 적고, Copy&Paste를 하는 양이 줄어드니까 생산성이 좋아진다는 주의 주장이 있었다.

() 객체지향의 중심내용
   데이터와 메소드가 한 바운더리 안에 속해 있으며, 이것을 User Defined Data type이라고 볼 수 있으며, 결국 이 말은 abstraction data type이라고 부르자고하는 것이다. 게다가 상속이라는 개념은 Copy&Paste를 줄여보고자 하는 것으로 보면 더 쉬울 것이며, 이런 상속은 다이내믹 바인드라는 개념과 통할 것 같다. 그런데 이렇게 하다보니까, 재사용만 할 것이 아니라 다시 정의할 수 있으면 더 좋지 않겠느냐 하는 의견이 많아 Polymorphism, 즉, overloading, overriding, template등이 생겨났다고 보믄 되겠다.

() Java의 클래스의 특징은 하나의 파일내에 하나의 public 클래스 유지

() Java는 따로 컴파일 하지 않고 save as를 하면 컴파일이 된다. 그래서 가끔 clean을 해줘야 하는 이유는 dependency가 항상 제대로 유지되지 않는 경우가 있기 때문이다. 각각의 class file이 따로 byte code로 존재한다는 사실은 아주 중요한 사실이다.

() Java는 pointer를 갖고 있지 않다. 대신 reference 변수를 가지고 있는데, 이 변수와 pointer의 차이는 변수자체를 막아 놓아서 주소연산이 안된다는 것이다. 

() 메모리의 종류
   ; Method와 static field는 Code영역에 들어가며,
   ; Heap은 모든 new로 할당된 것이 들어간다.
   ; 마지막으로 stack은 locak variable들이 들어간다. 

() Java는 아무도 referencing하지 않는 heap의 객체를 찾아서 garbage collection을 한다.
  예를 들어 stack p = new stack(); 이후에 p=null;로 assign해 주면 보통 날아가 버린다.

() Java Syntax중 재미있는거  하나가 있는데 label의 사용법이다. 이 label은 goto를 위한 label이 아니라 중첩 loop를 빠져나오는 거로 이용한다. 이거 재미있는 방법이다.

() Method Overloading관련한 재미있는 메타포
   - 2+3 = ?   2.0 + 3.0 = ?  이게 같은 것일까? 실은 +는 Overloading 된 연산자라고 봐야하지 않을까? 아하하 Java에서 Overloading은 절제의 미가 필요하다. 이게 남발되면 뭐가 뭔지 전혀 모르겠으니까.

() Java의 문제점 중 재미있는거 하나.
  String str = "abc" + "def"; 라고 정의하면 무슨 일이 벌어질까?  "abc"로 heap을 잡고, "def"로 heap을 잡은 다음에 "abcdef"를 heap으로 잡게 된다. 이러면 abc랑 def는 garbage가 되고 이런 일을 loop안에서 하면 엄청난 garbage가 생산되게 된다는 말씀!

() 추상화
주어진 문제나 시스템 중에서 중요하고 관계있는 부분만을 분리하여 간결하고 이해하기 쉽게 만드는 작업. 이러한 과정은 원래 문제에서 구체적인 사항은 되도록 생략하고 핵심이 되는 원리만을 따지기 때문에 원래 문제와는 전혀 관계가 없어 보이는 수학적인 모델이 나오기도 한다. 이 기법은 복잡한 문제나 시스템을 이해하거나 설계하는 데 없어서는 안 될 중요한 요소이다. 그러니까, 간결하고 이해하기 쉽게 만드는 작업이다란 말이지.

() 클래스 이야기 
   ; 클래스란 객체를 기술하는 방법으로서 클래스의 instance를 객체라고 부르면 될 것 같

 
다. 



() 캡슐화 한다?
  ; 알약을 예로 들면 알약 위에 씌여져 있는 설명을 interface라고 하고, 그 안의 실제 조그마한 알약들이 implementation이라고 한다면 interface와 implementation을 분리할 수 있다.  결국 public은 interface며, private은 implementation이라고 볼 수 있는데, 이런 관점에서 보면 interface는 implementation을 분리한다는 측면에서 short cut (바로가기)라고 보면 되지 않을까? 하는 생각이 든다.

() Interface와 abstract
  위의 내용을 정리하면 abstract는 뭔가를 간결하게 만든다는 의미이며 실제로는 객체를 만들 수는 없는 class이며, 가장 기본적인 특징만을 가지며, 상속을 시키는 것을 목적으로 하고, interface는 바로가기 키이며 실제로는 다중상속이 불가능한 Java에서 뭔가 필요한 class의 속성이 있을 때 바로가기 키를 가져온다는 의미라고 보면 되겠다. (꼭 다중상속이 아니더라도 바로가기 키가 필요할 때도 많다)
abstract의 경우 method도 body를 가질 수 없고 이름만 갖게 되는데, 이는 하위 클래스들에게 overriding을 허용하여 모든 객체가 그 method를 갖게 하려는 의도이다. 
interface가 body가 없는 이유는 바로 "바로가기"이기 때문이다. 이름 이외의 body를 가지고 있다면 바로가기라고 부를 수 없지 않은가?

() 자바는 왜 다중상속을 막고 있는가?
  여러개의 class를 다중상속하게 되면 중복된 naming의 변수가 있을 때 충돌하게 된다. 이런것을 아예 막아서 문제 발생의 여지를 막아버리는 것이다. 차라리 필요한 기능이 있다면 바로가기키인 interface를 이용하는 것이 훨씬 유리할 것이다라는 말이다.

() VC++의 vitual의 의미는?
   virtual의 의미는 Dynamic binding을 의미하며, virtual 이 붙은 함수는 메모리에 올라가야만 주소를 할당받는다. Java의 경우에는 무조건 vitual로 heap에 자리잡으며, 이는 곧 method는 공용으로 사용할 수 있다는 것을 의미한다. (각각의 객체가 method주소 테이블을 가지고 있음)

() 패키지는 왜?
   Name space라고 해서 세상에 하나밖에 없는 클래스를 만들기 위해서 만들었다. URL의 반대 방향으로 package를 정의하고 import를 이용해서 공통부분의 이름을 대치할 수 있다.
예를 들어 import java.util.Data 라면 그 다음부터 Date()만 써도 앞의 것을 알아서 붙여준다. 실제 클래스의 이름은 패키지명과 클래스 이름을 합한것이 실제 이름이다. 

  
() 표준 자료구조;
   Collction은 set과 List가 있고
   Map은 Tree와 Hash가 있고
   Iterator는 자료를 찾는 표준적인 방법이라고 보믄 된다.

'안드로이드 (자바)' 카테고리의 다른 글

Web View를 이용한 유투브 런처  (0) 2011.08.07
안드로이드 App 구조  (0) 2011.08.04

설정

트랙백

댓글