반응형

1. 배경

이제 돈받고 만들고 있는 (월급임 ㅋㅋ) 회사의 AOS앱이 곧 출시를 앞두고 있는데 

 

사용자의 편의를 중점적으로 고민하다보니, 점점늘어나는 Dialog, Fragment, Adapter, Object, Interface 또 view class 들 같이 걍 파일 폭탄 ( apk 빌드하면 120메가가 넘는데 drawable도 너무 많음 )

 

아무튼 어떤 kt 확장자 파일에서는 import만 120줄이 넘어가고, util함수나 데이터 전부 분리했는데도, 2000줄이 넘어버림.. 또 어떤 fragment는 요구하는 기능이 너무 많아서, 함수의 연결이 너무 어렵기도 하고, 

어떤 건 이미 빌드된 오픈소스 프로젝트에서 코드를 뜯어와서 해석하기도 어렵고 

어떤 파일에서는 데이터 구조의 뎁스가 너무 깊어서 (5중임) 이를 구현해 내는데 머리가 터지는 줄 알았음..

 

지금 배경만 적는데도 4가지가 나왔는데, 실제 기능구현때는 너무 많은 로직을 맛봐야 한다는 뜻 ㅋㅋ 

그래서 지금도 주석을 

------#  주석 내용 #------

라고 하는데

 

이건 잘 들어오는데 복잡한 로직에서는 어떻게 주석을 적아야할까..

 

2.  본문

일단 AI는 

repeat(targetCount) {
    val randomIndex = indices.random() // 무작위로 인덱스를 선택
    indices.remove(randomIndex) // 선택한 인덱스는 제거
}

// 새로운 문자열 생성
val maskedString = resultString.mapIndexed { index, char ->
    if (index in indices) char else '*' // 선택된 인덱스는 '*'로 대체
}.joinToString("")

binding.tvFADIdFinded.text = maskedString
// 무결성 검증
                if (isFileIntegrityValid(tempFile, expectedHash)) {
                    // 파일 암호화 및 저장
                    encryptFile(tempFile, file, generateAESKey(context))
                    tempFile.delete()

                    Log.v("SaveFileFromUrl", "Success To Save File : ${file.absolutePath}")
                    true
                } else {
                    Log.e("SaveFileFromUrl", "File integrity check failed.")
                    tempFile.delete()
                    false
                }

이렇게 두가지로 나뉨

1. 코드 끝에 줄바꿈 하기 전에 주석을 적음

2. 코드가 끝나면 줄바꿈 하고나서 주석을 적음.

 

그래서 잠깐 쉬는타임에 주석에 대해서 생각해본 바 이렇게 나누면 좋을 듯 싶었다

 

1) 간단한 함수 앞에는 간단한 주석 

// ------# 각도 계산 #------
private fun calculateSlope(point1 : Pair(Float, Float), point2 : Pair(Float, Float), point3 : Pair(Float, Float)) : Float {
	return math 어쩌구 하는 로직 
}

2. 길고 복잡한 함수는 중간에 변수나, 로직에 대한 주석

// 입력 문자열
val resultString = "example" 

// 입력 문자열 길이
val length = resultString.length

// 가려야 할 * 개수
val targetCount = length / 2 

// 모든 인덱스를 리스트로 생성
val indices = resultString.indices.toMutableList() 

// 무작위로 인덱스를 선택해 *로 대체
repeat(targetCount) {
    
    // 무작위로 인덱스를 선택
    val randomIndex = indices.random() 
    
    // 선택한 인덱스는 제거
    indices.remove(randomIndex) 
}

// 새로운 문자열 생성
val maskedString = resultString.mapIndexed { index, char ->

	// 선택된 인덱스는 '*'로 대체
    if (index in indices) char else '*' 
}.joinToString("")

binding.textView8080.text = maskedString

안복잡해보이긴 함 ㅋㅋ 근데 함수형 프로그래밍에 맞춰서 함수가 엄청 분리돼 있거나 하면, 함수 따라다니다가 걍 눈 아파 죽음.

그래서 이 함수에 대한 내용을 적는 거임

 

위 코드는 그냥 아이디 찾기 같은 부분에서 아이디의 절반을 * 로 가리는 로직인데 이 로직도 다른 부분 작업하다가 급하게 Crashlytics에 뜨거나, 로그에 나왔을 때는 이 코드를 다시 해석하기 귀찮아 짐. (뇌가 그러던데??)

 

아무튼 이렇게 넣으면 머리의 집중력을 유지하면서 더 효율적으로 디버깅이나 개선을 할 수 있다고 생각이 들었음.

 

3. 범위 주석

뭔가 초기에 간단하게 어떤 부분을 가리고, 어떤건 뷰모델에서 가져오고 하는 부분은 사실 크게 바뀌지 않아서..

override fun onViewCreated() {
    ...
    ------! 초기 설정 시작 !------
    1. 번들에서 값 꺼내오기
    2. 뷰모델에서 가져와서 전역변수 셋팅 등 
    ...
	------! 초기 설정 끝 !------

이런 느낌인데 이 부분도 생각보다 잘 보이고, 이 이후로 코드를 보면되니 좀 효율적이더라. 더 좋은 방법도 개발하다 발견할 수도 있고, 

코드 리뷰를 하다가 볼 수도 있으니 더 적어야겠다 

 

암튼 끗

반응형