본문 바로가기

Paper Review/CV

클린코드(Clean Code) & 리팩토링(Refactoring) 시큐어코딩(Secure Coding)

클린코드(Clean Code) & 리팩토링(Refactoring) 시큐어코딩(Secure Coding)

클린코드

  • 가독성이 높은 코드
  • 코드를 작성하는 의도와 목적이 명확하며, 코드가 잘 읽히고, 정돈된 코드
    • 네이밍 이 잘 되어 있고 오류, 중복 코드가 없음
    • 의존성이 최소화되어있고, 클래스, 메소드가 한가지 일만 처리
    • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행해야 함

클린코드를 만드는 규칙

1. 네이밍(Naming)

변수, 클래스, 메소드에 의도가 분명한 이름을 사용

 

2. 주석(comment)

  • 코드를 읽는 사람이 코드를 잘 이해할 수 있도록 작성
  • 코드 내용을 빠르게 유추할 수 있는 내용에는 주석을 달지 않는다.

 

3. 꾸미기(aesthetics)

  • 규칙적인 들여쓰기와 줄바꿈
  • 불규칙한 중복 코드를 제거한다

 

4. 흐름제어(making control flow easy to read)

  • 비교문 작성시 왼쪽에는 변수를, 오른쪽에는 상수를 둔다.
  • 부정이 아닌 긍정을 다룬다
  • 삼항 연산자는 매우 간단한 경우에만 사용한다
  • do-while 루프는 피한다.

5.  함수(Function)

함수는 가급적 작게, 한번에 하나의 작업만 수행하도록 작성한다.

var vote_changed = function (old_vote, new_vote) {
    
	var score = get_score();
    
	if (new_vote !== old_vote) {
		if (new_vote == 'Up') {
			score += (old_vote === 'Down' ? 2 : 1);
		} else if (new_vote == 'Down') {
			score -= (old_vote === 'Up' ? 2 : 1);
		} else if (new_vote == '') {
			score += (old_vote === 'Up' ? -1 : 1);
		}
	}
	set_score(score);
    
};

 

▼ 클린코드

var vote_value = function (vote) {
    
    if(vote === 'Up') {
        return +1;
    }
    if(vote === 'Down') {
        return -1;
    }
    return 0;
    
};

var vote_changed = function (old_vote, new_vote) {
    
    var score = get_score();
    
    score -= vote_value(old_vote); // 이전 값 제거
    score += vote_value(new_vote); // 새로운 값 더함
    set_score(score);
};

 

 


리팩토링

  • 코드리뷰를 통해 프로그램의 외부 동작은 그대로 두고 내부의 코드를 클린 코드로 개선하는 것
  • 코드의 가독성을 높이고, 프로그램의 유지보수에 큰 도움이 된다.
  • 리펙토링을 진행하며 의도치않은 기능 변경이나 버그가 발생할 것을 대비해 회귀테스트를 진행한다.

리팩토링 대상

  • 메소드 정리
  • 중복 코드
  • 거대한 클래스
  • 객체 간 기능에 따른 위치 변경, 클래스 구분
  • 캡슐화를 이용한 데이터 구성
  • 조건문 단순화
  • 메소드 호출 단순화
  • 클래스 및 메소드 일반화: 동일 기능 가진 메소드가 여러개일 경우 수퍼 클래스로 이동

코드리뷰 과정

  1. 계획 수립
  2. 교육과 역활 정의
  3. 코드 인스펙션(작성한 소스코드를 분석해서 개발 표준에 위배되었거나 잘못된 부분을 수정) 위한 인터뷰, 산출물, 도구 준비
  4. 검토 회의로 각자 역할을 맡아 임무 수행
  5. 발견된 결함을 수정하고 재검토 여부 결정
  6. 보고된 결함 및 이슈가 수정되었는지 확인하고 시정조치 이행

시큐어 코딩

  • 안전한 소프트웨어를 개발하기 위해, 소스코드 등에 존재할 수 있는 잠재적인 보안약점을 제거하는 것
  • 사례
    • sql injection 취약점으로 개인정보 유출
    • url 파라미터 조작해 개인정보 유출
    • 무작위 대입공격으로 기프트카드 정보 유출

KISA에서 Python 시큐어코딩 가이드를 제공하고 있다.

 

KISA 한국인터넷진흥원

 

www.kisa.or.kr


일반적으로 리팩토링이 클린코드보다 더 큰 의미를 갖는다.

 

또한 클린코드는 프로그램 설계시부터 잘 이루어지는 것이 중요하고, 리팩토링은 결과물이 나온 이후의 수정, 추가작업 시 개선해 나가는 것이다.

 

정리하자면 클린코드는 다른사람이 이해하기 쉽게 잘 작성된 코드 형식, 리팩토링은 코드 작성을 완료한 뒤 클린 코드 형태로 기존 코드를 정리하는 것, 시큐어코딩은 보안을 생각한 코딩이라고 보면 될 것 같다.🧐

 


내용출처

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/Clean%20Code%20%26%20Refactoring.md