구조적 프로그래밍 설계

 

1. 구조적 프로그래밍 설계 구조

  1. 순차구조: 프로그램 코드가 위에서 아래로 일직선으로만 실행되는 구조
  2. 선택구조: 분기형 구조로, 주어진 조건 만족 여부에 따라 처리 대상과 순서를 전달하는 구조     //if, if-else
  3. 반복구조: 반복형 구조로, 조건이 만족할 때까지 동작을 반복하는 구조     // while, for

 


 

2. 구조적 프로그래밍 언어 개발 절차

  1. 요구사항 분석: 고객이 원하는 요구사항을 수집하여 명세화하는 단계
  2. 구조적 분석: 고객이 원하는 기능, 시스템 환경, 데이터를 종합하여
            데이터 흐름도(Data Flow Diagram)를 작성하는 단계
            대표적인 기법에는 ERD(Entity Relation Diagram)과 DFD(Data Flow Diagram)가 있음
  3. 구조적 설계: 재활용, 결합도를 낮춰 독립성을 높이는 단계
  4. 구조적 프로그래밍: 순차, 선택, 반복의 논리 구조로 구성하여 프로그램 복잡성을 최소화하여 프로그래밍하는 단계

 

데이터 흐름도 DFD(Data Flow Diagram)

  • 데이터 흐름도 DFD(Data Flow Diagram): 데이터 각 기능을 분할하여 표현한 구조도. 모듈에 대응하여 개발함.
    • 프로세스(Process)
      1. 과 원안의 이름으로 표현하고,
        데이터를 원하는 데이터로 변환하여 출력시키기 위한 과정
      2. 원안의 이름은 프로세스가 수행하는 프로세스
        또는 일을 수행하는 행위자를 기술함
      3. 항상 입력되는 데이터를 입력할 수 있어야함
      4. 자체적으로 데이터 생성 불가능
      5. 항상 새롭게 개발할 수 있는 가치를 부가해야 함
    • 데이터 흐름(Data Flow)
      1. DFD의 구성요소들 간의 인터페이스를 나타냄
      2. 주로 프로세스들 사이를 연결하고,
        데이터 저장소로부터 데이터 흐름을 나타내기도 함
      3. 부여되지 않은 화살표로 표시하거나 명칭을 부여함
        (참조를 위해 명칭 부여를 권장함)
      4. 서로 다른 데이터 흐름에는 같은 이름을 부여하지 않음
    • 데이터 저장소(Data Flow)
      1. 저장되어 있는 정보 집합임
      2. 저장되는 저장소 파일, 때로는 휴지통일 수도 있음
      3. 데이터 변동 표시 X
      4. 데이터 흐름을 표시함으로써 데이터의 입출력을 나타냄
      5. 표기법은 두 개의 직선인 평행선으로 나타내고,
        평행선 안에 명칭을 부여함
    • 외부 엔티티(External Entity)
      1. 액터는 데이터를 생성, 소비함으로써
        데이터 흐름도를 주도하는 활성 객체임
      2. 액터는 데이터 흐름도의 입력과 출력에 붙음
      3. 프로세스 처리 과정의 데이터 발생의 시작 및 종료를 나타냄
      4. DFD 범위 밖에 사각형 형태로 표시함
  • 자료사전 DD(Data Dictionary): 자료나 의미나 자료의 단위 및 값에 대한 사항을 정의하는 도구
  • 상태 전이도 STD(State Transition Diagram): 보통 어떤 상태에서 다른 상태로 변경되는 과정을 작성
  • 소단위 명세 Minispec(Mini Specification): 나눌 수 없는 부분까지 기능을 분리하여 작성한 명세서

 


 

3. DFD 설계 방법

  1. 업무를 분석하여 프로세스에 대한 입출력 데이터 흐름을 식별, 업무의 주변 경계에 표시함
  2. 데이터 흐름에 필요한 외부 엔티티를 정의함
  3. 입력 → 출력, 출력 → 입력, 중간 지점부터의 데이터 흐름을 식별함
  4. 모든 접속 관계 데이터 흐름에 명칭을 부여함
  5. 프로세스에 대해 입출력 데이터 흐름의 명칭에 따라 이름을 부여함
  6. 프로세스에 관련된 데이터 저장소를 정의함
  7. 상위 레벨 DFD 작성 → 하위 레벨의 DFD로 분할하여 최하위 레벨까지 그림
  8. 세분화를 계속하여 최종 데이터 흐름도를 단순한 기능들만으로 그릴 수 있는 단계까지 분할함

 


 

구조적 프로그래밍 언어 활용

 

1. 구조적 프로그래밍 언어: 하나의 프로그램이 구조를 갖도록 만들어 나가는 프로그래밍 방법

  1. 절차식 언어: 위에서 아래로 순서대로 실행되는 방식의 프로그램            // C
  2. 명령어 언어: 필요한 함수를 호출함. 명령은 메인 → 서브프로그램으로 하향식 방식을 이용함     // 파이썬
  3. 함수 중심 언어: 독립적인 행위를 할 수 있는 작은 단위로 나뉘며, 함수를 이용하여 구성함

 


 

2. 구조적 프로그래밍 유형

  1. C 언어: 미국의 벨 연구소, 시스템 소프트웨어 개발 언어, 이식성이 좋음, 시스템의 제어나 자료의 처리를 담당
  2. 파스칼(Pascal): 니클라우스 워드가 개발, 구조적 프로그래밍, 문법이 간결함, 구조적 프로그램 언어로 이용
  3. 에이다(Ada): 장시간 운용 가능한(Long-Lived) 대규모 시스템(System in the Large)을 위한 언어

 


 

3. 주요 구현 언어 문법

  1.  조건문: 명령어 흐름을 제어할 수 있는 역할을 하는 명령어 문장
    • if문: 참(TRUE, 1) 또는 거짓(FALSE, 0)이 나옴
    • if~else문: 다중의 조건을 체크할 수 있음
    • switch문: 정수 값에 해당하는 case 값을 찾아 명령어를 수행하고 종료.
      없다면 deafult 구문을 수행하고 종료.
  2. 반복문
    • for 반복문: 'for (초깃값; 반복 조건식; 증가 또는 감소)', ~번 반복
    • while 반복문: 'while (반복 조건식)', ~까지 반복
    • do-while 반복문: 한 번 작동한 후 ~까지 반복

 


 

객체지향 프로그래밍 설계

 

1. 객체지향 설계 원칙의 이해

  1. 객체지향 속성
    • 캡슐화: 객체의 속성과 행위를 하나로 묶고, 은닉하는 기법
    • 추상화: 공통적인 부분만 하나로 모은 것
    • 다형성: 같은 모양의 함수가 상황에 따라 다르게 동작하는 것
      • 오버로딩: 함수의 매개 변수 숫자, 타입 등을 다르게 해서 사용하는 기법
      • 오버라이딩: 상위 클래스의 메소드를
        하위 클래스에서 똑같은 이름으로 재정의하는 것
    • 정보 은닉: 캡슐화 정보들을 밖에서 접근 불가능하도록 하는 것
    • 상속성: 부모 클래스에서 새로운 기능을 추가해 자식 클래스를 만들어 사용하는 기법
  2. 객체지향 설계 원칙
    • 단일 책임 원칙(Single Responsibility Principle): 클래스는 각각 하나의 책임만 가져야 함
    • 개방-폐쇄 원칙(Open Closed Principle): 확장에는 열려 있고 수정에는 닫혀 있어야 함
    • 리스코프 치환 원칙(Liskov Substitution Principle):
      자식 클래스는 자신의 부모 클래스를 대체할 수 있다는 원칙
    • 인터페이스 분리 원칙(Interface Segregation Principle):
      사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙
    • 의존 역전 원칙(Dependency Inversion Principle): 변화가 없는 것에 의존해야 한다는 원칙

 


 

2. UML의 이해

  • 유즈케이스 다이어그램: 시스템 개발 과정에서 의사소통이 원활하게 이루어지도록
    표준화한 대표적인 객체지향 모델링 언어
    유스케이스 다이어그램
  • 클래스 다이어그램(Class Diagram): 클래스를 도식화하여 시스템의 특정 모듈이나 구조를 나타냄
    • 속성(Attribute): 보통 명사형으로 표현, 클래스의 멤버 변수로 사용됨
    • 행동(Operation): 다이어그램에서 가장 하단에 위치.
      클래스가 수행할 수 있는 동작을 기술함.
  • 시퀀스 다이어그램: 문제 해결을 위한 객체를 정의.
    객체 간 상호작용 메시지 시퀀스를 시간의 흐름에 따라 나타내는 다이어그램
    시퀀스 다이어그램
    • 활성 객체: 시스템의 행위자 혹은 시스템 내의 유효한 객체 라이프라인(Life Line)을 가짐
    • 메시지(Message): 서로 다른 객체 간의 상호작용 혹은 의사소통 통신을 정의하는 요소.
      선 + 화살표로 표시
    • 활성 박스(Activation Box): 객체 라이프라인 위에 그려지는 박스.
      객체의 정보 처리가 실행된다는 것을 나타냄

 


 

객체지향 프로그래밍 언어 활용

 

1. 객체지향 프로그래밍 언어: 데이터 추상화 → 객체 생성 → 상호작용 로직을 구성하는 프로그래밍 방법

  1. 객체지향 프로그래밍 언어 구성요소: 기본적으로 클래스 구조에서 시작. 클래스의 기본 구성요소는 변수와 메소드.
    • 클래스(Class): 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
      • 일반적으로, 클래스 이름 = 소스 파일명
      • 프로그램은 여러 클래스로 구성됨. 실행을 위해서 main() 메소드 사용
    • 객체(Object): 클래스의 인스턴스(Instance). 자신 고유의 데이터를 가지며 클래스에서 정의한 행위를 수행 가능.
      • main() 메소드는 프로그램이 실행하는 진입점.
        new() 연산을 통해 인스턴스를 생성함.
      • main() 에서 클래스부에 선언된 변수는 인스턴스를 통해 사용함
      • 인스턴스에서 변수와 메소드 사용은
        인스턴스명 다음에 변수명, 메소드명과 같은 형식으로 사용
    • 메소드(Method): 클래스로부터 생성된 객체를 사용하는 방법. 객체에 명령을 내림.
    • 속성(Property): 한 클래스 내에 객체들이 가지고 있는 데이터 값을 단위별로 정의한 것
  2. 접근 지정자
    1. public: 모든 접근을 허용
    2. protected: 자기 자신 클래스 및 상속받은 자식 클래스에서의 접근을 허용
    3. private: 자기 자신 클래스 내부의 메소드만 접근을 허용
    4. default: 명시하지 않은 경우. 같은 패키지라면 접근 가능.

 


 

2. 객체지향 프로그래밍 언어 기본 문법

  1. 데이터 타입: 원시형 자료는 char, boolean, byte, short, int, long.
    비원시 자료형은 원시형 자료형을 묶은 단독의 자료형.

    객체지향 데이터타입
  2. 변수와 메소드: 변수는 데이터를 저장하기 위한 메모리 공간에 대한 이름. 크기를 알아야 필요한 공간 확보 가능.
    • 변수 선언 방법: [접근제어자] 타입 변수명
      • 접근제어자: 변수의 접근 범위를 지정한 것.
        public, private, protected, default 등.
      • 타입: 자료형으로 타입을 지정한 것
    • 변수 유형
      • 멤버 변수(Member Variable): 클래스부에 선언된 변수.
        인스턴스 변수와 클래스 변수로 구분됨.
      • 인스턴스 변수(Instance Variable): 클래스가 인스턴스될 때
        초기화되는 변수. 인스턴스로만 접근 가능.
      • 매개 변수(Parameter): 메소드에 인자로 전달되는 값을 받기 위한 변수.
        메소드 내에서 지역변수처럼 사용.
      • 지역변수(Local Variable): 메소드 내에서 선언된 변수.
        멤버 변수와 동일한 이름 가능. 지역적으로 우선일 때 사용.
      • 클래스 변수(Class Variable): static으로 선언된 변수.
        인스턴스 생성 없이 클래스 이름의 변수명으로 사용 가능.
        main() 메소드에서 참조 가능.
    • 메소드: 특정 객체의 동작이나 행위를 정의한 것.
      '[접근제어자] 리턴 타입 메소드명([인자..]) {    }'
      • 접근제어자: 메소드의 접근 범위를 지정함
      • 리턴 타입: 함수 내에서 결과를 보내는 위치. 리턴이 없다면 void를 사용.
    • 연산자(Operator): 프로그램에서 변수의 값들을 계산하기 위해 사용함
      (대입연산, 사칙연산, 비트연산, 관계연산 등)

 


 

디자인 패턴:  객체지향 프로그래밍 시 문제에 대한 설계 사례를 분석하여 해결하기 위한 방법론

  1. 디자인 패턴 구조
    • 콘텍스트(Context): 문제가 발생하는 여러 상황을 기술
    • 문제(Problem): 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술
    • 해결(Solution): 문제를 해결하도록 설계를 구성하는 요소들과 책임 관계, 협력 관계를 기술
  2. 디자인 패턴의 종류
    • GoF 디자인 패턴: 23가지의 디자인 패턴이 있고, 구현 방식에 따라
      생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류함.
    • GoF 디자인 패턴의 분류:
생성 패턴 구조 패턴 행위 패턴
Abstract Factory
Builder
Factory Methods
Prototype
Singleton
Adaptor
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain of Responsibillity
Command
Interpreter
Iterpreter
Mediator
Memonto
Observer
State
Strategy
Template Method
Visitor

 


 

스크립트 언어 설계

1. 스크립트 언어(Scripting Language): 응용소프트웨어를 제어하는 컴퓨터 프로그래밍 언어

  1. 스크립트 언어 특징: 최종 사용자가 응용프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 도와줌
    • 인터프린터 언어(=컴파일러 언어): 코드를 작성함과 동시에
      인터프리터가 기계어로 번역하고 실행함
    • 단순한 구문: 타 프로그래밍 언어에 비해 단순한 구문과 의미를 내포함
    • 컴파일 시간 소요: 컴파일된 프로그램보다 실행 시간이 오래 걸림
    • 신속한 활용: 빠르게 배우고 작성하기 위해 고안된 언어기 때문

 


 

2. 기능 설계서와 화면 설계서

  • 기능 설계서: 개발자는 기능 명세서를 보고 전체 구조와 설계를 고려하여 '어떻게'를 개발함
항목 설명
화면 입력 내용 입력 전, 입력 중, 입력 후 상태가 어떻게 되는지 기재됨
버튼 이벤트 내용 비활성화, 활성화, 선택했을 때 액션에 대한 내용이 기재됨
에러 상황 사용자가 올바르지 않은 액션을 했을 때 어떻게 처리할지 기재됨
제한 개수 데이터 제한 개수 설정
외부 액션 데이터를 외부 수단(문자/이메일 등)으로 콘택트하는 시기/상황/메세지를 설계함
로직 내용 데이터가 나열되었을 때 표시되는 로직(추천/최신/인기)을 기재함
  • 화면 설계서: 파워포인트(Powerpoint), 스토리보드(Storyboard), 와이어프레임(Wireframe), 목업(Mockup) 등
    • 와이어프레임: 기획 단계에서 페이지 레이아웃이나 화면 이동,
      구성요소에 대한 내용을 기술한 문서
    • 스토리보드: 와이어프레임의 내용에 디스크립션 등을 포함한 설계 문서
    • 목업: 설계 단계에서 실제 화면과 같은 형태의 모형
  • 프로토타입: 인터렉션(Interaction, 상호작용)이 포함되어 테스트가 가능한 형태
  • UI 디자인: 화면의 모양이나 기능 등을 표현하는 것

 


 

스크립트 언어 활용

1. 스크립트 언어의 유형과 원리

  • 스크립트 프로그래밍 언어 유형
    • JavaScript(자바스크립트): 표준 HTML 문서 내에 삽입됨. 인터랙티브한 웹 페이지를 만들 수 있음
    • jQuery: HTML 문서에 삽입하여 사용할 수 있는 자바스크립트 라이브러리
    • JSP(JavaServer Pages): 코드를 직접 삽입하여 웹 브라우저에서 표현할 수 있도록 전달해줌
    • PHP(Hypertext Preprocessor): HTML 서버 스크립트 프로그래밍 언어.
      MySQL DB 환경에서 주로 같이 사용됨.
    • ASP(Active Server Pages): 윈도 서버에서 운영할 수 있도록 개발된
      스크립트 방식의 웹 프로그래밍 언어
    • Python: 객체지향 스크립트 프로그래밍 언어로 개발 기간이 단축되고 독립적임
    • VBScript: Visual Basic(비주얼베이직) 기반의 스크립트 프로그래밍 언어
  • 스크립트 프로그래밍 원리
    1. 스크립트 코드 작성: 최초 스크립트 코드를 작성함
    2. Byte Code 변환: 스크립트 엔진은 위에서부터 한 줄씩 해석하며
      가상 머신이 이해할 수 있게 변환함
    3. 기계어 변환: 가상 머신은 Byte Code를 CPU가 이해할 수 있는 기계어로 변환함
    4. CPU 코드 변환: CPU는 가상 머신이 만들어낸 기계어를 수행함
자바스크립트 코드

int a = 10;
int b = 20;
function(arg) {
console.log(arg);
}
자바스크립트 엔진 바이트 코드


ADD r0,
[6] LdamSmi [1]
가상머신 기계어

0010 1010
0010 1010
0010 1010
0010 1010
0010 1010
결과물

 


 

2. JavaScript 언어: 객체지향의 프로그래밍 언어로 웹 브라우저에서 주로 사용됨

  • 자바스크립트 구현 예

  • 자바스크립트 작성 방법
    • 자바스크립트는 HTML 문서 내에서 태그를 통해 작성됨
    • 작성되는 위치는 스크립트 태그 영역
    • .js 확장자를 갖는 외부 파일 형태로 작성 가능
      1. 영역 내부의 태그 내부에 자바스크립트 코딩을 작성함
      2. .js 확정자를 갖는 외부 자바스크립트 코드 파일을 생성하고 적용함