오늘도 삽질중

클린코드 책을 읽고서 chapter. 의미있는이름,함수 본문

기타

클린코드 책을 읽고서 chapter. 의미있는이름,함수

Choi3950 2020. 11. 3. 08:44
반응형

우연히 클린코드 책을 읽을 기회가 생겼다.

막상 읽어보니 공감가는 부분이 많았다.

특히 책의 첫장인 "깨끗한 코드" 챕터에는 나쁜코드로 치르는 대가에 있는 내용이 가장 공감이 되었다.

나중에 해야지, 추후에 재설계를 하는 행동 등등.....이 책에서는 이렇게 말한다.


그 순간은 오지 않는다. 


뭔가 씁쓸하면서도 맞는말 같다. 나중이란 없고 이미 결과물이 만들어 졌다면 손을 대는것도 겁이나고 하기 싫어질테니까


아무튼 클린코드 책을 읽고 개인적으로 정리하기 위해서 블로그를 작성한다.



1. 의미 있는 이름

- 의도를 분명히 밝혀라

- 발음하기 쉬운 이름을 사용해라

- 검색하기 쉬운 이름을 사용해라

- 기발한 이름은 피하라

- 한 개념에 한 단어를 사용해라



2. 함수

- 함수의 기능은 한가지만 해라

- 작게 만들어라

-인수가 없는것이 이상적이다.




이 챕터에서 가장 기억에 남는것은 함수에 인수 즉 파라미터를 받지 않는것이 가장 좋은것.

어쩔수 없이 파라미터를 받더라도 최소한으로 할 것 1개가 가장 좋고, 그 다음이 2개...즉 최소한으로 받자.

그리고 매개변수에 Boolean을 받지말라고 되어있었다.


fun Test(b : Boolean){
if (b) {
//.....
//.....
} else {
//.....
//.....
}
}



이렇게 쓰지말라는것이다. 공감이 되는게 함수내 이렇게 분기가 되있으면 분석하느라 시간 더 걸리더라

아무튼 거두절미하고 해당 내용을 참고해서 회사 소스를 일부분 변경해보았다.




fun initView() {
Log.e("check user_id : " ,"${UserPreference.UserPreferencesHolder.instance.userId}")
val accessToken = ServicePreference.UserPreferencesHolder.instance.accessToken
Log.e(this::class.java.simpleName ,"AccessToken : $accessToken" )
if (TextUtils.isEmpty(accessToken)) {
Handler().postDelayed({ goToLogin() }, 1000)
} else {
val isSocial = UserPreference.UserPreferencesHolder.instance.userLoginSocial
if (isSocial) {
val snsName: String
val userName = UserPreference.UserPreferencesHolder.instance.userName!!.trim { it <= ' ' }
val userNickName = UserPreference.UserPreferencesHolder.instance.userNickName!!.trim { it <= ' ' }
val snsType = UserPreference.UserPreferencesHolder.instance.userLoginSocialType
val snsID = UserPreference.UserPreferencesHolder.instance.userLoginSocialId
Log.e("sns Data check : ", "snsType : $snsType , snsID : $snsID ")
snsName = if (!TextUtils.isEmpty(userName)) {
userNickName
} else if (!TextUtils.isEmpty(userNickName)) {
userNickName
} else {
""
}
requestLoginSocialAuth(snsName, snsType, snsID)
} else {
val UserPhone = UserPreference.UserPreferencesHolder.instance.userLoginPhone
Log.e(this::class.java.simpleName,"UserPhone : $UserPhone")
val UserPw = UserPreference.UserPreferencesHolder.instance.userLoginPw
Log.e(this::class.java.simpleName,"UserPw : $UserPw")
requestLoginAuth(UserPhone, UserPw)
}
}
}


처음에 로그인을 담당하는 화면부분이다.

대충보면 알겠지만 token값이 없으면 login으로 이동하고, token이 있다면 소셜을 체크해서 소셜로그인을 하던지 일반 로그인을 하던지 대략 이렇게 되어있다.


나는 이부분을 이렇게 수정해봤다.


private fun loginORMemberShip() {
val accessToken = prefDatabaseImpl.accessToken
if (accessToken.isEmpty()) {
accessTokenEmptyGoLogin()
} else {
loginTypeIsPhoneORSocial()
}
}

private fun accessTokenEmptyGoLogin() {
startActivity(Intent(this, LoginActivity::class.java))
}


private fun loginTypeIsPhoneORSocial() {
val isSocial = prefDatabaseImpl.userLoginSocial
if (isSocial) apiLoginSocial() else apiLoginPhone()
}

함수별로 기능을 분리하는 식으로 작업을 해보았다.

특히 함수이름을 어떻게 지어야 처음보는 사람도 이해가 빠를까 고민하며 작성을 해봤는데

그 의미가 잘 전달됬으면 좋겠다.


부족한 부분이나 개선사항은 언제든 환영입니다.

피드백은 겸허히 받겠습니다.


반응형
Comments