본문 바로가기
Software Engineering

클린코드 & 시큐어 코드 & 리팩토링

by 차가운개발 2024. 10. 23.

 

ㅇ 클린코드

  • 코드를 작성하는 의도와 목적이 명확하며, 다른 사람이 쉽게 읽을 수 있어야 한다.
  • 가독성이 높은 코드

** 가독성을 높이려면

  • 네이밍이 잘 되어야 한다.
  • 오류가 없어야 한다.
  • 중복이 없어야 한다.
  • 의존성을 최대한 줄여야 한다.
  • 클래스 혹은 메서드가 하나의 일만 처리한다.

클린코드를 만들기 위한 규칙

  • 네이밍
    변수, 클래스, 메서드의 의도가 분명한 이름을 사용한다.
    잘못된 정보를 전달할 수 있는 이름은 사용하지 않는다.
    범용적으로 사용되는 단어X
    연속된 숫자나 불용어를 덧붙이는 방식은 피한다.

  • 주석 달기
    코드를 읽는 사람이 코드를 작성한 사람만큼 잘 이해할 수 있도록 도와야한다.
    반드시 달아야 할 이유가 있는 경우에만 작성한다.
    빠르게 유추할 수 있는 코드에는 사용하지 않는다.

  • 꾸미기
    보기좋게 배치하고 꾸민다. 보기 좋은 코드가 읽기 좋다.
    규칙적은 들여쓰기와 줄바꿈
    일관성 있고 간결한 패턴을 적용한 줄바꿈
    메서드를 이용해 불규칙한 중복코드 제거

  • 흐름제거 만들기
    왼쪽에는 변수를, 오른쪽에는 상수를
    부정이 아닌 긍정을 다룬다.
    if/else를 사용하며 삼항 연산자는 간단한 경우에만 사용한다.
    do/while 루프의 사용은 피한다.

  • 착한 함수
    함수는 가급적 작게, 한번에 하나의 작업만 수행하도록 하자

 

ㅇ 리팩토링

  • 프로그램의 외부 동작은 그대로 둔 채 내부의 코드를 정리하며 개선하는 것
  • 레거시 코드를 클린 코드로 만드는 것
  • 리팩토링은 코드의 가독성을 높이고, 향후 유지보수에 큰 도움이 된다.

 

리팩토링이 필요한 경우

  • 메서드 정리
    그룹으로 묶을 수 있는 코드, 수식을 메서드로 변경한다.
  • 객체 간의 기능 이동
    메서드 기능에 따른 위치 변경, 클래스 기능을 명확히 구분한다.
  • 데이터 구성
    캡슐화 기법을 적용해 데이터 접근 관리
  • 조건문 단순화
    조건 논리를 단순하고 명확하게 작성
  • 메서드 호출 단순화
    메서드 이름이나 목적이 맞지 않을 때 변경
  • 클래스 및 메서드 일반화
    동일 기능 메서드가 여러 개 있으면 수퍼 클래스로 이동

** 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것 즉 개발 속도를 향상시킨다.'

 

진행방법

아키텍처 관점 시작 > 디자인 패턴 적용 > 단계적으로 하위 기능에 대한 변경으로 진행 
> 의도하지 않은 기능 변경이나 버그 발생을 대비해 회귀테스트 진행

 

클린코드와 리팩토링의 차이는?

리팩토링이 더 큰 의미를 가진다. 클린 코드는 단순히 가독성을 높이기 위한 작업이라면, 리팩토링은 클린 코드를 포함한 유지보수를 위한 코드 개선이다. 

클린 코드와 같은 점은 설계부터 잘 이루어져 있는 것이 중요하고 결과물이 나온 이후 수정이나 추가 작업이 진행될 때 개선해 나가는 방법이 올바른 방법이다.

 

 

ㅇ 시큐어 코드

안전한 소프트웨어를 개발하기 위해 소스코드 등에 존재할 수 있는 잠재적인 보안약점을 제거하는 것

 

보안 약점을 노려 발생하는 사고사례들

  • SQL 인젝션 취약점으로 개인유출 사고 발생
  • URL 파라미터 조작 개인정보 노출
  • 무작위 대입공격 기프트카드 정보 유출

 

참고: https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/%ED%81%B4%EB%A6%B0%EC%BD%94%EB%93%9C(Clean%20Code)%20%26%20%EC%8B%9C%ED%81%90%EC%96%B4%EC%BD%94%EB%94%A9(Secure%20Coding).md

'Software Engineering' 카테고리의 다른 글

Third Party  (2) 2024.10.23
DevOps  (1) 2024.10.23
OOP 객체 지향 프로그래밍(Object-Oriented Programming)  (1) 2024.10.23
애자일(Agile) 방법론  (1) 2024.10.23
TDD(Test-Driven Development)  (0) 2024.10.23