티스토리 뷰

반응형


#. 좋은 코드를 작성하기 위한 원칙


  ㅇ 간결한 코드 작성하기

    - 가장 간결한 코드, 읽기 쉬운 코드 작성


  ㅇ 적극적으로 코드 재사용하기

    - 코드의 모듈화

    - 코드가 세 번 이상 등장한다면 항상 해당 코드를 함수로 분리해 재사용한다는 기본 원칙을 세우기

    - 항상 코드를 깔끔하게 작성하고 유지하는 데 신경을 써보기

    - 간결한 코드가 디버깅 시간에 엄청난 차이를 가져다 줌

    - 이상적인 세계에서는 한 함수가 두 가지 이상의 일을 해서는 안 된다고 말함


  ㅇ 표준 라이브러리 공부하기

    - 표준 라이브러리의 사용

    - 언어의 문자열, 동적 배열, 스택, 큐, 리슽, 딕셔너리 등의 자료 구조, 정렬 등의 표준 알고리즘 구현 사용법을 반드시 잘 알아 두기


  ㅇ 항상 같은 형태로 프로그램 작성하기


  ㅇ 일관적이고 명료한 명명법 사용하기

    - 사용하는 언어의 표준 라이브러리에서 사용하는 명명규약을 익히기


  ㅇ 모든 자료를 정규화해서 저장

    - 같은 자료를 두 가지 형태로 저정하지 않는 것

    - 프로그램이 자료를 입력받거나 계산하자마자 곧장 이루어져야 함

    - ex) 유리수를 항상 약분하여 기약 분수로 표현 or 시간대 조합 or 문자열 인코딩


  ㅇ 코드와 데이터 분리하기

1
2
3
4
5
6
static String[] monthName = {"January""February", ... "December"};
static int[] daysIn = {1328, ... 31};
 
// 
static int[] coordinateDx = {22-2-2};
static int[] coordinateDy = {1-11-1};
cs

 

  +. 참고 도서 
    ㄴ Clean Code (https://book.naver.com/bookdb/book_detail.nhn?bid=7390287)

        - 변수와 함수의 명명법, 함수의 구성, 주석 쓰는 방법
        - 깨끗하고 잘 구성된 코드의 여러 우너칙과 적용 예 




#. 자주 하는 실수


  ㅇ 산술 오버플로

    - 변수의 표현 범위를 벗어나는 값을 사용하는 경우


  ㅇ 배열 범위 밖 원소에 접근

 

  ㅇ 일관되지 않은 범위 표현 방식 사용

    - ex) 함수 내에서 사용하는 표현 방법과 함수 밖에서 사용하는 표현 방법이 서로 다른 경우

    - 한 가지 방법으로만 범위를 표현


  ㅇ off-by-one 오류

    - 계산의 큰 줄기는 맞지만 하나가 모자라거나 많아서 틀리는 코드의 오류

    - 부등호 연산자를 혼동하여 원소를 하나 더 적게 혹은 많이 순회하는 경우


  ㅇ 컴파일러가 잡아주지 못하는 상수 오타


  ㅇ 스택 오버플로

    - 콜 스택이 오버플로해서 프로그램이 강제종료 되는 것

    - 재귀 호출의 깊이가 너무 깊어져서 발생


  ㅇ 다차원 배열 인덱스 순서 바꿔 사용하기


  ㅇ 잘못된 비교 함수 작성

   

  ㅇ 최소, 최대 예외 잘못 다루기

    - 가능한 입력 중 최소 값과 최대 값이 예외가 되는 문제들을 고려 안하는 경우

    - ex) 소수 판별 함수에서 1, 2를 고려 안하고 넘어가는 경우


  ㅇ 연산자 우선순위 잘못 사용하기

    - 헷갈릴 경우 괄호로 적절히 감싸기


  ㅇ 너무 느린 입출력 방식 선택

    - 자신이 사용하는 언어에 어떤 입출력 방식이 지원되는지 확인하고 어느 쪽이 빠른지 미리 점검해보기


  ㅇ 변수 초기화 문제

    - 이전 입력에서 사용한 전역 변수 값을 초기화하지 않고 그대로 사용하는 것

    - 테스트 방법으로 예제 입력 파일을 두 번 반복해서 써보기




+. 디버깅 대신 눈으로 검증해보기


  ㅇ 작은 입력에 대한 결과 확인

    - 예제의 입력 크기가 클 경우


  ㅇ 단정문 사용

    - 주어진 조건이 거짓일 때 오류를 내고 프로그램을 강제 종료시키는 함수


  ㅇ 프로그램의 계산 중간 결과 확인

    - 문제가 생기는 범위를 좁힐 수 있음



참고 : 알고리즘 문제 해결 전략


반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday