일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 괌 신혼여행
- 쿠폰나눔
- 안방농사
- 안드로이드
- 보일러절약
- 스투키
- 메이플
- 다이소 방울토마토키트
- 다크나이트
- 휴대용무선충전기
- 어플만들기
- 메이플스토리
- 핫엔드
- 다이소 방울토마토
- 괌
- 메이플스토리M
- Ender 3 V3 KE
- 방울토마토 유기농
- 방울토마토키우기
- 집 방울토마토
- 신혼여행
- 2in1무선충전기
- 방토 농사
- Android
- 겨울나기
- 맥세이프충전기
- 방울토마토 씨부터 키우기
- 괌맛집
- 집에서 방울토마토 키우기
- 에어팟충전기
Archives
- Today
- Total
괴도군의 블로그
[Android] this / MainActivity.this 본문
반응형
안녕하세요 괴도입니다.
오늘은 this에 대해서 알아보도록 하겠습니다.
안드로이드를 포함한 자바에서 this는 자신의 객체를 가리킵니다.
예를들어 Box라는 클래스가 있을경우
Box box = new Box();
위와 같이 객체를 생성해서 사용하듯이
클래스안에서 자신의 객체를 이용할때는 this를 통해서 처리합니다.
(물론 객체가 생성되어야 클래스안의 this도 사용되겠죠)
this는 객체이기때문에 this.함수명 / this.변수명 으로 public접근자를 접근할 수 있구요
this()를 통해서 생성자를 표시하기도합니다.(이부분은 생성자 안에서만 사용가능합니다.)
여기까지는 일반 자바설명입니다.
---------------------------------------------------------
안드로이드에서 보통 MainActivity에서 this를 많이 사용합니다.
왜냐하면 this인 MainActivity클래스에는 많은 메소드와 변수들이 들어있기 때문입니다.
상속구조를 살펴보자면
java.lang.Object | ||||
↳ | android.content.Context | |||
↳ | android.content.ContextWrapper | |||
↳ | android.view.ContextThemeWrapper | |||
↳ | android.app.Activity |
이런식으로 포장이 되어있죠
Context를 많이 보셨을텐데 Activity의 부모가 Context입니다.
이 Context에는 많이 사용하는 startActivity(Intent intent)등 메소드가 구현되어있고
SharedPreference도 Context의 getSharedPreference(String name, int mode)를 통해서 사용해야하죠
또 이 Context를 통해 구현된 메소드들을 사용하려면 파라미터로 Context를 넣어줘야하죠
이렇듯 Context, 즉 Activity는 모든 기능들을 사용할때 필요하다고 보시면 됩니다.
그래서 this로 Activity의 객체를 전달해주는것이죠
그런데 메인액티비티에서 this를 사용하기만 하면되는데
MainActivity.this로 적어야하는부분이 있습니다.
그것은 다른 인터페이스의 구현부분에서 사용시에는 그 인터페이스 자체를 가리키게되기때문에
정확히 지정해주기위해서 MainActivity를 앞에 붙여주는것입니다.
그렇다고 아예 다른 자바파일에서도 똑같이 사용하시면 안됩니다.
그곳에서 this는 그 클래스의 객체일뿐입니다.
다른클래스에서 MainActivity.this로 사용하시면 안되는 이유는 처음에도 썼듯이..
this는 클래스 안에서만 효과가 있습니다.
(아마 this의 접근제어자가 private/protected 겠죠?)
위에서 인터페이스의 구현부분에서 사용시라고 말을 했는데 글로 설명하니 어렵게 느껴질수 있겠네요
1 2 3 4 5 6 7 8 9 10 11 12 13 | Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //이부분은 new View.OnClickListener인터페이스의 안이기때문에 //this를 사용하면 인터페이스만 가리키게됩니다. //메인액티비티의 이름이 MainAcitivity일때 // MainActivity.this라고 쓰면 사용이 가능합니다. MainActivity.this.startActivity(new Intent(MainActivity.this,Activity.class)); //Intent(Context packageContext, Class<?> cls) //인텐트를 사용할때도 context가 필요합니다 } }); | cs |
반응형
'#프로그래밍 > Android' 카테고리의 다른 글
[Z플립3 위젯런처] 한글버전...1.0.0 (0) | 2021.11.29 |
---|---|
[PlayStore] 정책위반메일대처 / Android 광고 ID 사용 및 개발자 배포 계약의 4.8 조항을 위반 (0) | 2018.09.27 |
[Android] 채팅서버 / 채팅앱 소스입니다. (9) | 2016.12.02 |
[Android] Frame / View 정리 및 커스텀뷰 (0) | 2016.10.20 |
[Android] View Capture / 화면 캡쳐하기 (0) | 2016.10.07 |
Comments