Kotlin/[스스로]Kotlin&안드로이드
Android - [여기서 @는 뭘 뜻하는 걸까 ?] 예 : Intent(this@FirstActivity, SecondActivity::class.java)
[진주]
2023. 9. 4. 08:29
728x90
반응형
binding.firstbuttonGosecond.setOnClickListener {
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
startActivity(intent)
}
뷰바인더를 사용하다가 이 @는 왜 써줘야하나, 의미를 찾아보기로 했다.
먼저 위 내용이 있는 전체 코드를 보자
FirstActivity.kt
package com.example.test
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.test.databinding.ActivityFirstBinding
class FirstActivity : AppCompatActivity() {
private lateinit var binding: ActivityFirstBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityFirstBinding.inflate(layoutInflater)
setContentView(binding.root)
// 바로 리스너 설정
binding.firstbuttonGosecond.setOnClickListener {
val intent = Intent(this@FirstActivity, SecondActivity::class.java)
startActivity(intent)
}
}
}
포스팅을 하던 중, inner 클래스가 궁금하여 정리해보았다. ▼
https://vjinjoov.tistory.com/manage/posts/
FirstActivity의 onCreate 메서드 안에서는 기본적으로 this가 FirstActivity 인스턴스를 참조합니다.
그러나 setOnClickListener 람다의 안쪽에서는 this가 람다를 의미하게 됩니다.
람다식 또는 익명 내부 클래스 내에서 바깥쪽 클래스의 this를 참조하고 싶을 때 @를 사용하여 명시적으로 바깥쪽 클래스를 지정해줍니다.
이 경우, setOnClickListener 내부에서 this만 사용하면 그것은 View.OnClickListener의 인스턴스를 참조하게 됩니다. 따라서 FirstActivity의 인스턴스를 참조하고 싶을 때 this@FirstActivity를 사용합니다.
간단하게 표현하면, 우리가 setOnClickListener 람다 내부에서 있는데 FirstActivity를 명시적으로 가리키기 위해서 @를 사용한 것입니다.
728x90
반응형