Eighteeen / CleanCode_Book_Study

📚 클린코드 북 스터디 📚
4 stars 0 forks source link

[서론] - 변수를 private으로 정의하는 이유 #11

Closed deepredk closed 2 years ago

deepredk commented 2 years ago

변수를 private로 정의하는 이유를

라고 설명했는데 오히려 변수 타입이나 구현을 맘대로 못 바꾸지 않나?

맘대로 바꾸고 싶어서 private으로 정의한다는게 무슨 이야기일까?

deepredk commented 2 years ago

public으로 하면 외부에서 어떻게 바뀔지 모르니까 조심스럽게 바꿔야 하는데

private으로 하면 외부에서 바뀔 가능성이 없어 자유롭게 바꿀 수 있으니까

이걸 말하는게 아닐까 싶음

sookyeonghwang commented 2 years ago

@deepredk 의견과 같은 생각입니다.

WinningBean commented 2 years ago

변수가 String이라고 가정해보겠습니다.

public 변수일 경우 해당 자료구조를 사용한 다른 위치에서는 변수를 String으로 받고 String을 이용해서 이미 구현을 한 상태이기 때문에 변수 타입을 변경한다면 이를 활용한 모든 위치를 수정해야 하며, String 특성을 이용한 구현문이 있다면 이 또한 다른 로직을 사용하여 구현해야 합니다.

private 변수일 경우 String getA(), void setA(String) 위와 같은 함수가 있다고 가정해보겠습니다. String 타입에서 boolean 혹은 int 등의 자료타입으로 바꾸고 싶을 때, getA, setA를 다른 위치에서 사용했다고 하더라도, getA 내부에서 다른 자료형이라도 String으로 반환해주면 되고, setA도 마찬가지로 파라미터 String을 바꾸고자 하는 자료형 타입으로 내부에서 변환해주면 됩니다.

이와 같은 이유로 변수 타입이나 구현을 맘대로 바꿀 수 있다 라고 얘기하고 있지 않나 싶습니다.

deepredk commented 2 years ago

변수 타입을 맘대로 바꿀 수 있다

변수가 String이라고 가정해보겠습니다.

public 변수일 경우 해당 자료구조를 사용한 다른 위치에서는 변수를 String으로 받고 String을 이용해서 이미 구현을 한 상태이기 때문에 변수 타입을 변경한다면 이를 활용한 모든 위치를 수정해야 하며, String 특성을 이용한 구현문이 있다면 이 또한 다른 로직을 사용하여 구현해야 합니다.

private 변수일 경우 String getA(), void setA(String) 위와 같은 함수가 있다고 가정해보겠습니다. String 타입에서 boolean 혹은 int 등의 자료타입으로 바꾸고 싶을 때, getA, setA를 다른 위치에서 사용했다고 하더라도, getA 내부에서 다른 자료형이라도 String으로 반환해주면 되고, setA도 마찬가지로 파라미터 String을 바꾸고자 하는 자료형 타입으로 내부에서 변환해주면 됩니다.

이와 같은 이유로 변수 타입이나 구현을 맘대로 바꿀 수 있다 라고 얘기하고 있지 않나 싶습니다.

구현을 맘대로 바꿀 수 있다

public으로 하면 외부에서 어떻게 바뀔지 모르니까 조심스럽게 바꿔야 하는데

private으로 하면 외부에서 바뀔 가능성이 없어 자유롭게 바꿀 수 있으니까

이걸 말하는게 아닐까 싶음