결국 add 함수의 전달인자(argument)로 권한을 반환하는 함수를 넣고싶은건데 자바의 매개변수에 함수를 못넣는다.
왜냐하면 자바의 함수는 1급객체가 아니기 때문 (1급객체 조건 3가지는 변수에 할당가능 하고 객체의 인자로,
리턴값으로 넘겨질 수 있어야함)
그래서 함수를 들고있는 인터페이스를 넣어야한다. (왜? 그건 1급객체야?)
자바에서는 함수를 파라미터로 전달하고싶으면 무저건 인터페이스를 넘기게 되어있다 (오브젝트도 가능하다고 함)
즉 람다식으로 함수를 파라미터로 넘겨주면 된다 (흠… 모르겠네)
위의 내용은 강의에서 들은 내용임
그리고 궁금한점
1. 함수를 들고있는 인터페이스는 1급 객체인가?
2. 람다식은 함수를 들고있는 인터페이스며 1급객체인가?
1급 객체는 처음 들어보네 ㅇㅅㅇ
코드도 보여줄게 @Override public Collection<? extends GrantedAuthority> getAuthorities() { Collection collector = new ArrayList<>(); collector.add(()-> {return user.getRole();});
해당 댓글은 삭제되었습니다.
님 좆고수네요 근데 좀만더 쉽게 설명해줄수있으셈요?
제가 자바를 배운적이없어서 c랑깔짝 c++ 깔짝, 파이썬 깔짝, js깔짝 대고 스프링하는건데 유졸도 이해하게끔 한번만 더... 설명해주셈 50%이해됫으니 ㅠㅠ
결국엔 파라미터로 던질려면 객체로 만들어서 던져야한다는거임? 람다식은 왜 던질수있지 ㅇㅅㅇa
언어도 공부할게 많구나 ㅇㅅㅇ 망했네
그건모르겟고 난 1급시민이 되고싶다
"함수를 들고 있는 인터페이스를 넣어야 한다" <- 너무 대충 둘러대는 것 같네.. 인터페이스를 넘겨주는게 아니라 실체가 있는 객체이고 객체니까 당연히 일급시민인건데
그냥 함수의 인자값으로 함수를 넣고싶으면 걍 람다식으로 넣으면 된다 걍 이렇게 이해하고 넘어갈까 ㅠ?
사실 말로 이해하는 것보다 쓰다보면 자연스럽게 이해되는 부분이라 그냥 대충 넘어가면 됨..
람다는 다이나믹 디스패치로 동작함. 런타임에 가서야 어떤 메서드가 실행될지 결정됨. 런타임에는 람다로 넘겨지는 객체(클래스)가 인터페이스에 담기게 되고 해당 객체의 메서드가 실행되는 방식. 따라서 일급시민은 인터페이스가 아니라 클래스에 해당함.
찾아보니까 람다식이 함수형 프로그래밍인데 이걸 자바에 이식하다보니까 함수형 인터페이스를 만든거임? 추상메소드 형태로 람다식을 받나보네
익명 클래스랑 비슷한거 같아서 블로그 글 읽고 있는데 메모리에 클래스 파일이 안올라가나보네 ㅇㅅㅇa
익명클래스를 쓸수도 있음. 해당 익명클래스는 인터페이스의 구현체가 되겠지
인터페이스 개념이 헷갈린다 이거부터 봐야할거같애.. 추상 메소드 추상 클래스 abstract 관련된것도 모르겠네
() -> {} 는 new 인터페이스() { } 와 같음. 인터페이스만 람다로 쓸 수 있고, 해당 인터페이스는 반드시 구현해야하는 함수를 하나만 가지고 있어야함.
맛깔나게 가르치네 찾아보니까 백기선 이분이 하시는거같음
너 설명 잘한다. 제대로 알고있는거같음