안드로이드이긴하지만 그냥 언어 문법일텐데
내가 약간 헷갈림 ㅠㅠ
긍까 저렇게 클래스 인스턴스를 바로 생성해서 넣을때
cancelNotification()은 BroadcastReceiver의 함수가 아니라
밖에있는 클래스의 private함수거든?
근데 저걸 참조하더라고.
비슷하게아는건 C++에서 lambda 할때 이렇게 접근할수있떤데 그때 대충 봐서 까먹었음..
어떻게 접근하는거임 전혀 연결성없을텐데? extends를한것도아니고 넘어간것도아니고...
내부인스턴스에서 외부 인스턴스의 레퍼런스를 잡고있음
캡처..캡처..
레퍼런스를 잡고있음? 시발 어디서? 어떻게? 내가 그걸 직접참조할방법은? 저거 람다인듯람다아닐텐데 캡처하는게 외부클래스 자체를 캡처하고잇음? 내부에서 필요한것들만캡처하는게아니고?
시발..캡처..캡처..개새끼캡처..
에이 개그치는거임? 저거 context 그 context아님 ㅋㅋ
저기서 context는 자기가 아니고, 안드로이드의 context 객체. this를 내부 인스턴스에서 참조 가능한것은, context가 넘어와서가 아닌, 내부 익명 클래스의 인스턴스에서 외부 인스턴스의 레퍼런스를 자체적으로 참조할 수 있는것임. 인자 하나도없이 인터페이스로 외부 변수를 참조할떄도 가능함
어디서 봤는데 어디서봤는지 한참 찾다가 찾았다 시파..
https://slipp.net/questions/278
아... { } 로해서 바로 그안에 오버로딩하는게 생각해보니 익명클래스 람다를 만드는거엿다... 인터페이스로 외부(바로바깥꺼)를 참조한다고? 캡처...랑 다른건가... 암튼 감사함 공부해보겠음!!! 감사합니다
아 lambda 에서 인스턴스를 생성하는 그 순간에 캡처해오는구나. 그리고 거기서 변경하면 바깥하고 전혀다른값이 될수잇구나 ;;;; 존나웃기네 c#에서는 바깥이나 안이나 공유하는데
외칠림감사합니다~★
자바가 람다를 지원하는게 또하나의 인터페이스, annotation을 개발햇다하드라. ㅁㅊ ㅈㄴ 자바는 팔생각 없다 ㅅㄱㅇ
ㅂ백왕ㅇ님은 넘나잘하셔서 제까짓게....
ㅇㅇ, 백왕 / 람다가 나왔을때 같이 나온건 아니고(자바8), 내부 익명 인터페이스 + 인스턴스 화 할때(이걸 람다식으로 줄여서 쓰지 ..) 자신을 감싸고 있는 컨텍스트의 값들을 복사해오는것 .. 그래서 참조가 가능한데, 이 참조값이 final이 아니면 참조가 안됨. 근데 slipp 에서 토론하고 있는것은, 이 final 이 객체일경우 객체 내부의 값을 조작하는 방식으로 final 제한이 깨질 가능성이 있다는 것 ..
인텔리제이(안드로이드스튜디오.1.5.1)에서는 그걸 강제로 줄임. 사실 다를바가 없기도하니까 (아마?)
instantiating 할때 caller 라고해야할까 암튼 그쪽의 object context를 복사해오는건 알겠음. 변수는 final만? 물론 그게 합당하긴한데 지금 보면 final아닌 변수에 액세스가 가능한걸?
ㅇㅇ/ 강제로 줄이는건 아니고 .. 줄여서 보여줌. 안드로이드는 jdk 7지원이라서 람다가 안됨. 그냥 ide단에서 저렇게 회색빛으로 줄여서 보여주는거고, 인텔리제이에서 jdk8로 프로그래밍을 하면 줄이는게 어떠냐 하고 물어봐주긴함.
메소드호출은 그냥 됨. 대신 저 익명 함수 안에서, 저 메소드를 호출시켰을떄의 정합성을 보장하지는 못함
글고 감사하게 링크걸어주신 clipp에서는... final object의 field var에 접근에 대한게아니라 final아닌 var에 접근했을시에 [외부의 var]와 [캡처된 var]가 서로 다른 값을 가질 수 있어 thread-safe 하지 않다고 이야기하는것같은데..
그래서 final변수만 접근하자 왜냐하면 final변수는 캡처되더라도 따로 복사되는게아닌 java constant pool에서 관리되니까 sync를 보장할수 있따~ 하는거아님?
함수의 정합성은 무슨의미임...? (미안모르는단어ㅠㅠ)
ㅇㅇ / 자바의 내부 익명함수에서 외부 지역 변수가 final 이 아니면 문법오류가 뜨긴 함 (내부변수는 기억이 잘 안남). 그니까 함수 내부에서 접근한 데이터들이 람다 내부 컨텍스트에 있을때 접근한 데이터와 다를 수도 있다는 의미로 사용한 말임
정합성 설명 감사합니다!^^ 음.. final여부와 상관없이 다 캡처해오는거같은데
http://lgstar.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다. - DCW