본문 바로가기

일상/서평

[서평] 이렇게 하면 나도 프로그램을 잘 만들 수 있다

이렇게 하면 나도 프로그램을 잘 만들 수 있다

책을 읽고 내용을 요약했다.

Chapter3. 기억장소

  • 3.1 기억장소 관리방식
    • 할당과 해제
      • 기억장소 할당 (Memory Allocation, Storage Allocation)
        • 운영체제에게 기억장소를 요청하고, 사용할 수 있는 권한을 받는 작업.
      • 기억장소 할당 해제 (De-allocation)
        • 다른 소프트웨어들을 위해서. 그래야 다른 프로그램들이 반납된 장소를 사용가능하다.
    • 선언과 정의
      • 데이터를 저장할 기억장소에 대해 할당과 할당 해제를 프로그램에서는 변수 선언정의라고 한다.
  • 3.2 기억장소의 기능
    • 할당된 기억장소에 저장된 값이 어떤 것인지 알 수 없다. 이전에 실행되었던 프로그램에서 마지막으로 저장된 값이 있기 때문이다. 이를 Garbage 데이터라고 한다. 이런 쓰레기를 갖고 있는 할당된 기억장소를 곧바로 수식에 사용하면, 원치않는 결과, 즉 논리 오류가 발생한다.
    • 이를 방지하기 위해서 값을 새롭게 저장해주어야 한다.
      • 초기화(initialization)
      • 입력(input)
      • 치환 혹은 대입(Assignment)
    • 초기화
      • 기억장소의 할당과 동시에 할당된 기억장소에 최초로 원하는 값을 저장해서 쓰레기를 치우는 작업이다.
    • 입력
      • 입력장치를 통해 입력된 데이터를 저장하는 방식이다.
    • 치환 혹은 대입
      • 상수, 변수 그리고 수식으로 구해진 값으로 기억장소에 값을 저장하는 방식이다.
      • 등호(=)를 사용해서 치환한다.
      • isPassed = "PASS"

Chapter7. 분석

  • 7.1 분석
    • 프로그램이란 결국은 기억장소에 어떤 순서로 값을 저장하고 저장된 값을 이용하여 어떤 수식을 적용하고 판단하고 반복하면서 결과를 얻게 되는 것.
    • 자료명세서 작성법
      • 자료 명칭은 보통명사를 사용한다.
      • 변수는 소문자, 기호상수는 대문자로 표기한다.
      • 해당 기억장소에 저장되는 자료에 대한 자료형을 결정한다.
      • 문제 이해 단계에서 출력자료, 입력자료, 준비자료, 기호상수를 정리하고, 처리 과정 기술 단계에서 처리자료를 설계 단계에서 추가자료를 정리한다.
    • 모듈 기술서
      • 명칭
        • 성적을 평가하다
        • Evaluate
      • 기능
        • 입력하는 만큼 성명과 국어와 영어 점수를 입력받고, 총점과 평균을 계산하고, 평균을 기준으로 평가하고, 학생 성적을 출력하다
      • 입*출력
        • 입력
          • 성명, 국어점수, 영어점수
        • 출력
          • 통과여부
      • 자료명세서
        • 한글 | 영문 | 자료형 | 구분|
        • 1. 과목 갯수 | SUBJECTCOUNT | 실수 | 상수 |
        • 2. 기준평균 | PASSINGAVERAGE | 실수 | 상수
        • 3. 통과여부 | isPassed | 문자열 | 출력
        • 4. 성명 | name | 문자열 | 입력
        • 5. 국어점수 | koreanScore | 정수 | 입력
        • 6. 영어점수 | englichScore | 정수 | 입력
        • 7. 총점 | sum | 정수 | 처리
        • 8. 평균 | average | 실수 | 처리
    • 처리과정
      • 처리과정이란, 문제를 이해한 결과를 토대로 처리단계를 정하고 처리순서를 매겨 기술한 내용
      • 처리 과정을 기술하는 규칙
        • 구체적인 방법보다는 "무슨 일(What)을 할 것인가"만을 기술한다.
        • 입력, 치환, 산술, 관계, 논리, 출력의 기본 기능 단위로 한 번에 한 가지 일만 기술한다.
        • 반드시 목적어 + 동사 형식으로 기술한다.
        • 처리단계의 레벨은 7+_2 단계까지 허용하나 너무 단계의 레벨이 깊으면 복잡해 이해하기 어려우므로 가능하면 3단계까지 표현한다.
        • 레벨을 표현할 때는 가우스 10진 번호 매김 기법과 들여쓰기를 사용한다.
          • 가우스 10진 번호 매김
            1. 1.1 1.1.1 2. 2.1 2.1.1 2.2 2.2.1
        • 처리 과정 기술 순서
          • 1. 문제 전체에 대한 처리를 순차적으로 표현한다.
          • 2. 기술된 순차적인 표현들에서 선택ㅇ이나 반복이 필요한 부분에 이를 추가한다.
          • 2.1 선택은 참과 거짓에 따른 내용을 레벨을 낮추어 기술한다.
          • 2.2 반복은 반복에서 처리할 내용을 레벨을 낮추어 기술한다.
      • 처리과정 예시1
        • 1. 이름, 국어점수, 영어점수를 입력받는다.
        • 2. 번호를 매긴다.
        • 3. 총점을 구한다.
        • 4. 평균을 구한다.
        • 5. 평가를 하다
        • 6. 성명, 국어점수, 영어점수, 총점, 평균 그리고 평가를 출력한다.
        • 7. 끝내다.
        • 첨언
      • 처리과정 수정1
        • 1. 파일의 끝이 아닌동안 반복한다.
          • 1.1. 이름, 국어점수, 영어점수를 입력받는다.
          • 1.2. 번호를 매긴다.
          • 1.3. 총점을 구한다.
          • 1.4. 평균을 구한다.
          • 1.5. 평가를 하다
          • 1.6. 성명, 국어점수, 영어점수, 총점, 평균 그리고 평가를 출력한다.
        • 2. 끝내다.

Chapter8. 설계

  • 8.1 설계
    • 문제
      • 1. 1에서 100까지 합을 구하는 문제에 대해 설계를 하십시오.
      • 2. 1부터 100,000까지, 100,000 포함하여 7의 배수가 몇 개 있는지를 구하는 문제에 대해 설계를 하십시오.
      • 3. 수들을 입력받아서 짝수의 개수와 홀수의 개수를 구하는 문제에 대해 설계를 하십시오.

Chapter9. 검토(Inspection)

  • 반복문을 따라가며 각 변수에 들어오는 데이터를 따라가본다.
  • 직접 횟수별로 데이터의 변화를 작성한다. 최소 3번까지.

Chapter10. 구현

  • 구현
    • 기계어로 프로그램을 만드는 과정에서는 바로 명령 코드를 작성하기 때문에 프로그래밍 혹은 코딩이라는 개념이 적합하지만, 고수준 언어로 프로그램을 만드는 과정에서는 바로 명령 코드를 작성하는 것이 아니라 편집, 변환 등의 연속적인 작업을 통하여 명령 코드가 작성됩니다. 그래서 구현이라는 개념이 적합하다고 생각합니다.
  • SDK
    • Software Development Kit, 개발에 필요한 도구들을 하나의 세트로 묶어놓은 것.
  • 라이브러리
    • 입력, 출력 그리고 메모리 관리를 할 수 있는 기능들은 언어 소프트웨어 개발자들에 의해서 이미 작성된 코드들.
    • 이런 라이브러리를 API(Application Programming Interface)라고 표현함.
  • 모듈
    • 특정 기능을 수행하기 위해 관련한 기능들을 하나로 묶어놓은 집합.
    • 모듈 구조
      • 입력, 출력, 기능, 처리 그리고 내부 자료들.
      • 인터페이스(interface)
        • 입력, 출력, 기능
      • 구현(implementation)
        • 내부자료, 처리