프로그래밍 536

Objective C - 메소드 재정의하기

부모 메소드를 자식에서 재정의 할 수 있다. #import //Class A 선언 및 정의 @interface ClassA: NSObject{ int x; } -(void) initVar; @end @implementation ClassA -(void) initVar{ x = 100; } @end //Class B 선언 및 정의 @interface ClassB: ClassA -(void) initVar; -(void) printVar; @end @implementation ClassB -(void) initVar{ x = 200; } -(void) printVar{ NSLog(@"x = %i", x); } @end int main(int argc, const char * argv[]) { @autorel..

Objective C - @class 지시어 사용하기

@class지시어를 사용하면 그 클래스 형식의 인스턴스 변수를 만나게 될 때 컴파일러에게 그 클래스가 무엇인지 알려준다. 이것대신 헤더파일을 import해도 상관 없다. Rectangle.h #import @classXYPoint;//이러한 클래스가 쓰인다는 것만 알려줌 대신 import로 헤더파일을 불러와도 됨 @interface Rectangle: NSObject @property int width, height; -(XYPoint *) origin;//추가됨 -(void) setOrigin: (XYPoint *) pt; -(int) area; -(int) perimeter; -(void) setWidth: (int) w andHeight: (int) h; @end Rectangle.m #import..

Objective C - 상속으로 확장하기 (새 메소드 추가)

상속을 이해하기 위한 간단한 예제를 만들어 봅시다. 먼저 Rectangle클래스는 NSObject 클래스를 상속받고 Square클래스는 Rectangle클래스를 상속받습니다. 그리고 Rectangle클래스에서는 멤버변수들을 @property 지정을 해서 자동으로 게터와 세터 메소드를 생성시킵니다. 그런뒤 Square클래스에서는 self.width 를 통해 부모클래스의 width값을 접근할 수 있습니다.(게터 메소드에 의해서) Rectangle.h #import @interface Rectangle: NSObject @property int width, height; -(int) area; -(int) perimeter; -(void) setWidth: (int) w andHeight: (int) h; @..

안드로이드 - ListFragment 만들기

ListFragment는 리스트뷰로 가득 채워진 프래그먼트이며 목록을 보여주고 관리하는 것이 주된 임무이다. ListFragment 내부에는 단 하나의 리스트뷰 위젯만 배치되어 있으며 이 위젯에 목록이 표시된다. 구조나 프로그래밍 방법은 ListActivity와 비슷하다. getListView()메소드로 내부의 리스트뷰를 언제든지 구해 속성을 조정하거나 메소드를 호출 할 수 있다. setListAdapter 메소드로 어댑터를 지정하면 어댑터의 목록이 리스트뷰에 나타나며 리스트의 항목을 클릭하면 onListItemClick 콜백 메소드가 호출된다. 다음은 ListFragment로 리스트뷰와 같은 기능을 만드는 예제이다. 오직 ListFragmentTest.java 파일만 있으면 된다. package com..

안드로이드 - 백(Back) 버튼을 눌렀을 때 이전 프래그먼트로 복귀하기

여러 개의 액티비티로 구성된 프로그램은 실행 중인 액티비티의 목록을 스택에 저장한다. 프래그먼트도 액티비티와 마찬가지로 스택에 저장된다. 현재 상태를 스택에 저장하려면 다음 메소드를 사용한다. FragmentTransaction addToBackStack(String name) name은 스택의 상태에 대해 이름을 주는데 사용된다.(필요 없으면 null) 스택에 프래그먼트를 저장한 상태에서 사용자가 Back 버튼을 누르면 스택의 최상위에 있는 프래그먼트를 꺼내 원래 상태로 복귀한다. FragmentTransaction setTransition(int transit) FragmentTransaction setCustomAnimations(int enter, int exit [, int popEnter, i..

안드로이드 - 프래그먼트 인수 전달

프래그먼트도 메소드와 비슷하게 액티비티의 요구에 따라 조금씩 다르게 동작하기 위해 인수를 받아 들인다. 이때 프래그먼트의 인수 저장을 위해 아규먼트를 사용하며 다음 두 메소드로 아큐먼트를 설정하거나 얻는다. void setArguments(Bundle args) Bundle getArguments() 아규먼트는 프래그먼트 내부에 저장되는 Bundle 객체이며 주로 프래그먼트의 생성에 관련된 정보를 저장한다. 그래서 아규먼트는 액티비티에 프래그먼트를 부착하기 전에만 저장할 수 있다. 다음은 아규먼트를 사용하여 정수를 저장하는 예제이다. activity_fragment_argument.xml counterfragment.xml FragmentArgument.java package com.example.ch2..

안드로이드 - FragmentManager를 이용한 프래그먼트 추가, 삭제, 교체, 숨김

프래그먼트를 실행중에 편집하기 위해서는 프래그먼트 관리자를 사용해야한다. FragmentManager Activity.getFragmentManager() FragmentManager Fragment.getFragmentManager() 그리고 프래그먼트를 관리하려면 먼저 대상 프래그먼트를 검색해야 한다. Fragment findFragmentById(int id) Fragment findFragmentByTag(String tag) 프래그먼트는 다음 3가지 방식으로 지칭한다. 1. id: 프래그먼트를 배치할 때 지정한 android:id 속성의 정수값을 이용한다. 2. 부모의 id : 실행 중에 생성한 프래그먼트는 고유한 id가 없다. 그래서 부모의 id를 통해 프래그먼트를 찾는다. (단 첫 번째 차일..

Objective C - 간단한 예제를 이용한 상속이해

기본적으로 모든 클래스는 NSObject를 상속받는다. 이것만 유의하고 다음 예제를 보면 쉽게 상속을 이해할 수 있다. #import //ClassA 선언과 정의 @interface ClassA: NSObject{ int x; } -(void) initVar; @end @implementation ClassA -(void) initVar{ x = 100; } @end //ClassB 선언과 정의 ClassA로부터 상속 받음 @interface ClassB : ClassA -(void) printVar;//ClassB만의 고유 함수 @end @implementation ClassB -(void) printVar{ NSLog(@"x = %i", x); } @end int main(int argc, const..

안드로이드 - 프래그먼트 상태 저장하기

프래그먼트에 관한 내용은 안드로이드-프래그먼트-사용-간단-예제 를 참고하자. 이번에는 스마트폰의 상태 변경이나 화면이 가로로 될 때 자신의 데이터 저장을 해보자 이번에도 다음과 같이 3개의 파일을 만들어야 됨을 잊지 말자. counterfragment.xml 파일 기본적인 프래그먼트를 구성하는 UI 파일 save_fragment_state.xml 프래그먼트를 실제 사용하는 부분 SaveFragmentState.java package com.example.savefragmentstate; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; imp..

반응형