남의 코드를 내 입맛대로 바꿔보자

Sbae·2024년 8월 20일
post-thumbnail

현재 k8s 자동 프로비저닝 툴을 개발 중입니다.

기존의 코드

  • nodeListMap
    • map[string]bool
    • 이미 구성된 cluster의 node 정보

이미 구성된 cluster의 정보와 내가 가지고있는 파일의 정보들을 비교하여 값들을 다시 설정하는 코드

for ip := range nodeListMap {
	// nodeListMap의 InternalIP가 model.-----.PrivateIP에 없는지 확인
	found := false
	for _, nodeIP := range model.-----.PrivateIP {
		if ip == nodeIP {
			found = true
			break
		}
	}
	// 만약 해당 InternalIP가 model.-----.PrivateIP에 없다면
	if !found {
		// 해당 InternalIP에 해당하는 node의 Name 찾기
		var nodeName, nodeIP string
		for _, node := range nodeList {
			if node.InternalIP == ip {
				nodeName = node.Name
				nodeIP = node.AnsibleHost
				break
			}
		}
		// 찾은 Name과 IP를 model.-----에 추가
		if nodeName != "" {
			model.-----.IP = append(model.-----.IP, nodeIP)
			model.-----.PrivateIP = append(model.-----.PrivateIP, ip)
			model.-----.Name = append(model.-----.Name, nodeName)
		}
	}
}

의문점

  • 3~9번 라인
    • PrivateIP랑 InternalIP랑만 비교해서 있으면 그냥 for문을 넘기면 되는거 아닌가?
  • 이 외의 하단 라인
    • if node.InternalIP == ip, if nodeName != "" 해당 if들이 따로 떨어질 이유가 없다.

1차로 변경된 코드

  • 아직 로직 자체를 바꾸는 능력은 부족해서 가독성 있게 다시 작성해보자.
  • flag 변수를 제거한 뒤 불필요한 과정 및 if를 줄이고 훨씬 보기 좋게 완성
for ip := range nodeListMap {
	// model.-----.PrivateIP에 ip가 포함되어 있는지 확인 후 있으면 continue
	if slices.Contains(model.-----.PrivateIP, ip) {
		continue
    }

	// nodeList에서 해당 ip에 해당하는 node 찾기
	for _, node := range nodeList {
		if node.InternalIP == ip {
			// 찾은 Name과 IP를 model.-----에 추가
			model.-----.IP = append(model.-----.IP, node.AnsibleHost)
			model.-----.PrivateIP = append(model.-----.PrivateIP, ip)
			model.-----.Name = append(model.-----.Name, node.Name)
			break
		}
	}
}

마지막 변경된 코드

  • 1차 코드도 굳이 if로 비교할 필요도 없고 하나로 합쳐볼까?
    - 현재 파일 값과 구성되어있는 cluster정보를 비교한다음 추가만 해주면되잖아?
for _, node := range nodeList {
	if !slices.Contains(model.-----.PrivateIP, node.InternalIP) && nodeListMap[node.InternalIP] {
		model.-----.PrivateIP = append(model.-----.PrivateIP, node.InternalIP)
		model.-----.IP = append(model.-----.IP, node.AnsibleHost)
		model.-----.Name = append(model.-----.Name, node.Name)
	}
}

짧아지고 가독성 있게 잘 작성된 것 같아 만족한다.

profile
끄적이는 일반인

0개의 댓글