Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Item42. 익명 클래스보다는 람다를 사용하라 #77

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

Limwin94
Copy link
Member

@Limwin94 Limwin94 commented Jan 8, 2021

익명 클래스와 람다에 관계에 대해 설명하고 어느 부분에서 써야하는지 나타내는 아이템이었습니다.

Swift에 람다와 비교할수 있는 주제인 closure에 대해 람다와 가볍게 비교해보았습니다.
책에서 익명 클래스와 관련되어 설명된 내용은 언급하지 않았습니다.

Copy link
Member

@delmaSong delmaSong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

익명 클래스보다는 람다를 사용하라 가 스위프트에 해당하지 않아서 부제가 붙으면 좋겠습니다
수고하셨습니다 👏🏼

# item 42. 익명 클래스보다는 람다를 사용하라


### 왜 그럴까요?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

익명 클래스보다는 람다를 사용하라 라는 제안의 근거를 이제 밝히려고 하는거니까 왜 그래야할까요? 가 좀 더 적절하지 않을까 싶습니다

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오.. 확실히 문체가 자연스럽네요. 제안 감사합니다.

@delmaSong delmaSong removed the Delma label Jan 16, 2021
Copy link
Member

@ehgud0670 ehgud0670 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘 읽었습니다. 수고하셨습니다~!! 👏

return closure(number)
}

plusUsingClosure(number: 2, closure: ci)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. ci 가 cal인가요?
  2. plusUsingClosure의 리턴타입이 있으므로 변수에 할당에도 좋겠네요 (ex. let result = plusUsingClosure(number: 2, closure: cal)
  3. cal 말고 즉석에서 만드는 클로저 예시도 부탁드립니다~! (ex. _ = plusUsingClosure(number: 2) { n -> Int in n + 2 }

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 이전 예제를 가져오다보니 고치질 못했네요. 수정하겠습니다.
  2. 넣을까 말까한 예제였는데 넣어보겠습니다 :)
  3. 예시 추가했습니다!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3번에 해당하는게 Trailing Closure라 하더라구요. 저도 이번에 처음알았습니다,,ㅋㅋ

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 그런가요 ㅎㅎ 새로 알게되네용 감사합니다 👍


### 람다 사용 시 권장사항
해당사항은 클로저를 만들때도 적용하면 좋을 것 같아서 가져와보았습니다.
> 람다는 이름이 없고 문서화도 못 한다. 따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야한다.
Copy link
Member

@ehgud0670 ehgud0670 Jan 16, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
> 람다는 이름이 없고 문서화도 못 한다. 따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야한다.
> 람다는 이름이 없고 문서화도 못 한다. 따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야한다. 람다는 한 줄일 때 가장 좋고 길어야 세 줄 안에 끝내는게 좋다. 세 줄을 넘어가면 가독성이 심하게 나빠진다. 람다가 길거나 읽기 어렵다면 더 간단히 줄여보거나 람다를 쓰지 않는 쪽으로 리팩터링하길 바란다.

=> 설명이 부족한 것 같아 책의 이어지는 문장들을 가져와보았습니다!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일부러 짧게 가져왔는데 길게 쓰는편이 좋았을까요,,

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

일단 제안한 부분은 적용했습니다 👍🏻

Copy link
Member

@ehgud0670 ehgud0670 Jan 17, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

원래도 좋은데 그냥 구체적인 지시사항까지 있으면 좋을것 같아서 피드백 드렸습니다! ㅎㅎ
피드백 반영 감사합니다!

@ehgud0670 ehgud0670 removed the Jason label Jan 16, 2021

### 람다 사용 시 권장사항
해당사항은 클로저를 만들때도 적용하면 좋을 것 같아서 가져와보았습니다.
> 람다는 이름이 없고 문서화도 못 한다. 따라서 코드 자체로 동작이 명확히 설명되지 않거나 코드 줄 수가 많아지면 람다를 쓰지 말아야한다. 람다는 한 줄일 때 가장 좋고 길어야 세 줄 안에 끝내는게 좋다. 세 줄을 넘어가면 가독성이 심하게 나빠진다. 람다가 길거나 읽기 어렵다면 더 간단히 줄여보거나 람다를 쓰지 않는 쪽으로 리팩터링하길 바란다.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드로 예시도 있으면 좋을텐데 이건 고민 좀 하셔야겠네여 ㅋㅋ
그럼 고생하셨습니다!! 잘 읽었습니다 👍👍

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ㅋㅋㅋ 그러네요.. 예시가 흠 ㅠㅠ
감사합니다!

Copy link
Member

@dev-Lena dev-Lena left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

자바의 람다와 스위프트의 클로저 비교 잘 봤습니다. Swift 예제도 있으면 좋았을 텐데 아쉽네요!
람다와 클로저의 개념에 대해서 궁금해서 찾아보니 자바에도 클로저가 있네요!
참고하면 좋을 것 같아서 참고 자료 남깁니다! 한 번 읽어보면 좋을 것 같아요🤓

Java Lambda (7) 람다와 클로저


<br>

### 람다와 클로저(Closure)의 비교
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아래에는 람다와 클로저(Closure)의 공통점만 있는 것 같아서 차이점을 찾아봤는데요.
자바8에도 클로저가 있다고 합니다! 링크에 따르면

람다와 클로저는 모두 익명의 특정 기능 블록입니다. 차이점은 클로저는 외부 변수를 참조하고, 람다는 매개변수만 참조한다는 겁니다.
...
클로저는 외부에 의존성이 있고, 람다는 외부에 의존성이 없는 스태틱 메소드와 비슷합니다.
...
자바에서 클로저는 함수의 인스턴스입니다. 람다가 스태틱 메소드와 비슷하다면 외부 변수를 참조하는 익명 클래스가 클로저와 비슷하다고 볼 수 있습니다.
...
결론은 람다는 클로저를 포함하는 더 큰 개념이라고 볼 수 있습니다. 람다가 자신의 범위 밖에 있는 변수를 사용하면 그것은 람다인 동시에 클로저입니다.

혹시 수정할 의향이 있으시다면 차이점도 추가하면 좋을 것 같아요!

@dev-Lena dev-Lena removed the Lena label May 30, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants