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

1장 객체, 설계 #1

Open
lee-ji-hoon opened this issue Mar 12, 2023 · 4 comments · Fixed by #2, #5, #4 or #3
Open

1장 객체, 설계 #1

lee-ji-hoon opened this issue Mar 12, 2023 · 4 comments · Fixed by #2, #5, #4 or #3

Comments

@lee-ji-hoon
Copy link
Owner

No description provided.

@ldh019
Copy link
Collaborator

ldh019 commented Mar 14, 2023

멤버 변수를 선언할때 고민해야할 nullable, kotlin property, initial value, constructor 같은 부분이 Java와는 다르게 고려해야할 부분이라 많이 고민을 했는데,, 의견들이 궁금합니다~

@yangsooplus
Copy link
Collaborator

예제의 Class를 Kotlin의 data class로 옮겨오면서 인지부조화가 온 부분이 있습니다
자바에서는 멤버를 private로 선언하고 public으로 getter/setter를 정의하여 캡슐화하는데,
getter/setter를 알아서 만들어주는 data class에서는 멤버 변수를 private로 지정하면 getter/setter를 사용할 수 없는데?! 하는 인지부조화였습니다.

그래서 까보니까..

data class Audience(
    val bag: Bag
) 

private라고 명시하지 않아도 알아서 멤버변수는 private, getter는 public으로 생성된 것을 확인했습니다 (대쓱)

public final class Audience {
   @NotNull
   private final Bag bag;

   @NotNull
   public final Bag getBag() {
      return this.bag;
   }

bagvar로 변경하면 public setter도 생성되는거도 눈으로 확인했구연.

   public final void setBag(@NotNull Bag var1) {
      Intrinsics.checkNotNullParameter(var1, "<set-?>");
      this.bag = var1;
   }

여기서 의문..
그럼 data class의 private 멤버변수는 어케되는겨?!
그래서 바꿔보았습니다

data class Audience(
    private val bag: Bag
) 

멤버변수는 private로 되어있지만, getter/setter가 생성되지 않았다.

public final class Audience {
   private final Bag bag;

 ....
}

눈에 보이는 거에 속아 캡슐화가 안되는게 아닌가? 하는 인지부조화가 왔었는데
그냥 data class 쓰면 이미 캡슐화 잘 되고 있었다~

private set

  • getter는 public으로, setter는 private로 하고 싶다?
class Person(val name: String) {
    var age: Int = 24
        private set
}

@audxo112
Copy link
Collaborator

nullable, kotlin property, initial value, constructor 같은 부분

각각 진짜 Null 일수 있는지, 값이 존재할 수 있는지 "내가 설계 했을 때 어떤 식으로 할까" 를 기준으로 마이그레이션 했습니다

@lee-ji-hoon
Copy link
Owner Author

전체적인 내용에 대한 궁금증

코드가 자바 예시로 나와있다보니 코틀린으로 작성하면서 나오는 괴리감들이 존재한다.

  • class내의 private하지만 var변수
    • var은 언제든지 수정이 가능하지만 private하기에 상관이 없을까?
    • deep copy로 해결하기에는 많은 리소스가 낭비될 수도 있다는 생각이 든다.
  • 구현을 하다보니 data class로 우선 만들고 일반 class로 바꾸게 되던데 다들 어떤 방식으로 구현을 하게 되는지?

테스트 코드 구현한 사람 한정

  • 테스트 코드를 어떻게 짜면 좋을까?
    • 함수, 클래스, 예외상황 등등 어떤 기준이 있을까
    • 구현한 사람들은 어떤 기준으로 했을까?

This was referenced Mar 19, 2023
@ldh019 ldh019 linked a pull request Mar 19, 2023 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment