애플리케이션 성능 개선

clay·2023년 2월 13일
0

소프트웨어 개발

목록 보기
32/47
post-thumbnail

소스코드 최적화

소스 코드 최적화는 나쁜 코드를 배제하고, 클린 코드로 작성하는 것이다.

  • 클린 코드: 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순, 명료한 코드, 즉 잘 작성된 코드를 의미한다.
  • 나쁜 코드
    ⏺ 프로그램의 로직이 복잡하고 이해하기 어려운 코드로, 스파게티 코드와 외계인 코드가 여기에 해당한다.
    ⏺ 스파게티 코드: 코드의 로직이 서로 복잡하게 얽혀 있는 코드
    ⏺ 외계인 코드: 아주 오래되거나 참고문서 또는 개발자가 없어 유지 보수 작업이 어려운 코드
  • 나쁜 코드로 작성된 애플리케이션의 코드를 클린 코드로 수정하면 애플리케이션의 성능이 개선된다.
  • 클린 코드 작성 원칙

가독성

  • 누구든지 코드를 쉽게 읽을 수 있도록 작성한다.
  • 코드 작성 시 이해하기 쉬운 용어를 사용하거나 들여쓰기 기능 등을 사용한다.

단순성

  • 코드를 간단하게 작성한다.
  • 한 번에 한 가지를 처리하도록 코드를 작성하고 클래스/메소드/함수 등을 최소 단위로 분리한다.

의존성 배제

  • 코드가 다른 모듈에 미치는 영향을 최소화한다.
  • 코드 변경 시 다른 부분에 영향이 없도록 작성한다.

중복성 최소화

  • 코드의 중복을 최소화한다.
  • 중복된 코드는 삭제하고 공통된 코드를 사용한다.

추상화

  • 상위 클래스/메소드/함수에서는 간략하게 애플리케이션의 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현한다.

소스 코드 최적화 유형

  • 클래스 분할 배치: 하나의 클래스는 하나의 역할만 수행하도록 응집도를 높이고, 크기를 작게 작성한다.
응집도(Cohesion)
명령어나 호출문 등 모듈의 내부 요소들이 서로 관련되어 있는 정도, 모듈이 독립적인 기능으로
정의되어 있는 정도를 의미한다.
  • 느슨한 결합(Loosely Coupled): 인터페이스 클래스를 이용하여 추상화된 자료구조와 메소드를 구현함으로써 클래스 간의 의존성을 최소화한다.
인터페이스 클래스
클래스나 객체의 사용 방법을 정의한 것으로, 개발 코드와 클래스 사이에서 통신 역할을 한다. 
개발 코드가 클래스의 메소드를 직접 호출하지않고 중간 매체인 인터페이스 클래스를 사용하는
이유는 개발 코드를 수정하지 않고 실행 내용이나 리턴값을 다양하게 변경할 수 있기 때문이다.
이럴 경우 클래스를 직접 사용하지 않으므로 클래스간 의존성이 줄어든다.
  • 코딩 형식 준수: 코드 작성시 다음의 형식을 준수한다.
    ⏺ 줄 바꿈 사용
    ⏺ 개념적 유사성이 높은 종속 함수 사용
    ⏺ 호출하는 함수는 선배치, 호출되는 함수는 후배치
    ⏺ 지역 변수는 각 함수의 맨 처음에 선언
  • 좋은 이름 사용: 변수나 함수 등의 이름은 기억하기 좋은 이름, 발음이 쉬운 용어, 접두어 사용 등 기본적인 이름 명명 규칙을 정의하고 규칙에 맞는 이름을 사용한다.
  • 적절한 주석문 사용: 소스 코드 작성 시 앞으로 해야 할 일을 기록하거나 중요한 코드를 강조할 때 주석문을 사용한다.

소스 코드 품질 분석 도구

소스 코드 품질 분석 도구는 소스 코드의 코딩 스타일, 코드에 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기 위해 사용하는 분석 도구로, 크게 정적 분석 도구와 동적 분석 도구로 나뉜다.

Thread
프로세스 내에서의 작업단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위

추상화
불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것,
즉 모델화

정적 분석 도구

  • 작성한 소스 코드를 실행하지 않고 코딩 표준이나 코딩 스타일, 결함 등을 확인하는 코드 분석 도구이다.
  • 비교적 애플리케이션 개발 초기의 결함을 찾는데 사용되고, 개발 완료 시점에서는 개발된 소스 코드의 품질을 검증하는 차원에서 사용된다.
  • 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있다.
  • 동적 분석 도구로는 발견하기 어려운 결함을 찾아내고, 소스 코드에서 코딩의 복잡도, 모델 의존성, 불일치성 등을 분석할 수 있다.
  • 종류: pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura 등

동적 분석 도구

  • 작성한 소스 코드를 실행하여 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석하는 도구이다.
  • 종류: Avalanche, Valgrind 등

소스 코드 품질 분석 도구의 종류

도구설명지원 환경
pmd소스 코드에 대한 미사용변수, 최적화되지 않은 코드 등 결함을 유발할 수 있는 코드를 검사한다.Linux, Windows
cppcheckC/C++ 코드에 대한 메모리 누수, 오버플로우 등 분석Windows
SonarQube중복 코드, 복잡도, 코딩 설계 등을 분석하는 소스 분석 통합 플랫폼Cross-Platform
chechstyle자바 코드에 대해 소스 코드 표준을 따르고 있는지 검사한다.⏺ 다양한 개발 도구에 통합하여 사용 가능하다.Cross-Platform
ccm다양한 언어의 코드 복잡도를 분석한다.Cross-Platform
covertura자바 언어의 소스 코드 복잡도 분석 및 테스트 커버리지를 측정한다.Cross-Platform
AvalancheValgrind 프레임워크 및 STP 기반으로 구현된다.⏺ 프로그램에 대한 결함 및 취약점 등을 분석한다.Linux, Android
Valgrind프로그램 내에 존재하는 메모리 및 쓰레드 결함 등을 분석한다.Cross-Platform
profile
샤코타임 팬

0개의 댓글