구조적 프로그래밍 설계
1. 구조적 프로그래밍 설계 구조
- 순차구조: 프로그램 코드가 위에서 아래로 일직선으로만 실행되는 구조
- 선택구조: 분기형 구조로, 주어진 조건 만족 여부에 따라 처리 대상과 순서를 전달하는 구조 //if, if-else
- 반복구조: 반복형 구조로, 조건이 만족할 때까지 동작을 반복하는 구조 // while, for
2. 구조적 프로그래밍 언어 개발 절차
- 요구사항 분석: 고객이 원하는 요구사항을 수집하여 명세화하는 단계
- 구조적 분석: 고객이 원하는 기능, 시스템 환경, 데이터를 종합하여
데이터 흐름도(Data Flow Diagram)를 작성하는 단계
대표적인 기법에는 ERD(Entity Relation Diagram)과 DFD(Data Flow Diagram)가 있음 - 구조적 설계: 재활용, 결합도를 낮춰 독립성을 높이는 단계
- 구조적 프로그래밍: 순차, 선택, 반복의 논리 구조로 구성하여 프로그램 복잡성을 최소화하여 프로그래밍하는 단계
- 데이터 흐름도 DFD(Data Flow Diagram): 데이터 각 기능을 분할하여 표현한 구조도. 모듈에 대응하여 개발함.
- 프로세스(Process)
- 원과 원안의 이름으로 표현하고,
데이터를 원하는 데이터로 변환하여 출력시키기 위한 과정 - 원안의 이름은 프로세스가 수행하는 프로세스
또는 일을 수행하는 행위자를 기술함 - 항상 입력되는 데이터를 입력할 수 있어야함
- 자체적으로 데이터 생성 불가능
- 항상 새롭게 개발할 수 있는 가치를 부가해야 함
- 원과 원안의 이름으로 표현하고,
- 데이터 흐름(Data Flow)
- DFD의 구성요소들 간의 인터페이스를 나타냄
- 주로 프로세스들 사이를 연결하고,
데이터 저장소로부터 데이터 흐름을 나타내기도 함 - 부여되지 않은 화살표로 표시하거나 명칭을 부여함
(참조를 위해 명칭 부여를 권장함) - 서로 다른 데이터 흐름에는 같은 이름을 부여하지 않음
- 데이터 저장소(Data Store)
- 저장되어 있는 정보 집합임
- 저장되는 저장소 파일, 때로는 휴지통일 수도 있음
- 데이터 변동 표시 X
- 데이터 흐름을 표시함으로써 데이터의 입출력을 나타냄
- 표기법은 두 개의 직선인 평행선으로 나타내고,
평행선 안에 명칭을 부여함
- 외부 엔티티(External Entity)
- 액터는 데이터를 생성, 소비함으로써
데이터 흐름도를 주도하는 활성 객체임 - 액터는 데이터 흐름도의 입력과 출력에 붙음
- 프로세스 처리 과정의 데이터 발생의 시작 및 종료를 나타냄
- DFD 범위 밖에 사각형 형태로 표시함
- 액터는 데이터를 생성, 소비함으로써
- 프로세스(Process)
- 자료사전 DD(Data Dictionary): 자료나 의미나 자료의 단위 및 값에 대한 사항을 정의하는 도구
- 상태 전이도 STD(State Transition Diagram): 보통 어떤 상태에서 다른 상태로 변경되는 과정을 작성
- 소단위 명세 Minispec(Mini Specification): 나눌 수 없는 부분까지 기능을 분리하여 작성한 명세서
3. DFD 설계 방법
- 업무를 분석하여 프로세스에 대한 입출력 데이터 흐름을 식별, 업무의 주변 경계에 표시함
- 데이터 흐름에 필요한 외부 엔티티를 정의함
- 입력 → 출력, 출력 → 입력, 중간 지점부터의 데이터 흐름을 식별함
- 모든 접속 관계 데이터 흐름에 명칭을 부여함
- 프로세스에 대해 입출력 데이터 흐름의 명칭에 따라 이름을 부여함
- 프로세스에 관련된 데이터 저장소를 정의함
- 상위 레벨 DFD 작성 → 하위 레벨의 DFD로 분할하여 최하위 레벨까지 그림
- 세분화를 계속하여 최종 데이터 흐름도를 단순한 기능들만으로 그릴 수 있는 단계까지 분할함
구조적 프로그래밍 언어 활용
1. 구조적 프로그래밍 언어: 하나의 프로그램이 구조를 갖도록 만들어 나가는 프로그래밍 방법
- 절차식 언어: 위에서 아래로 순서대로 실행되는 방식의 프로그램 // C
- 명령어 언어: 필요한 함수를 호출함. 명령은 메인 → 서브프로그램으로 하향식 방식을 이용함 // 파이썬
- 함수 중심 언어: 독립적인 행위를 할 수 있는 작은 단위로 나뉘며, 함수를 이용하여 구성함
2. 구조적 프로그래밍 유형
- C 언어: 미국의 벨 연구소, 시스템 소프트웨어 개발 언어, 이식성이 좋음, 시스템의 제어나 자료의 처리를 담당
- 파스칼(Pascal): 니클라우스 워드가 개발, 구조적 프로그래밍, 문법이 간결함, 구조적 프로그램 언어로 이용
- 에이다(Ada): 장시간 운용 가능한(Long-Lived) 대규모 시스템(System in the Large)을 위한 언어
3. 주요 구현 언어 문법
- 조건문: 명령어 흐름을 제어할 수 있는 역할을 하는 명령어 문장
- if문: 참(TRUE, 1) 또는 거짓(FALSE, 0)이 나옴
- if~else문: 다중의 조건을 체크할 수 있음
- switch문: 정수 값에 해당하는 case 값을 찾아 명령어를 수행하고 종료.
없다면 deafult 구문을 수행하고 종료.
- 반복문
- for 반복문: 'for (초깃값; 반복 조건식; 증가 또는 감소)', ~번 반복
- while 반복문: 'while (반복 조건식)', ~까지 반복
- do-while 반복문: 한 번 작동한 후 ~까지 반복
객체지향 프로그래밍 설계
1. 객체지향 설계 원칙의 이해
- 객체지향 속성
- 캡슐화: 객체의 속성과 행위를 하나로 묶고, 은닉하는 기법
- 추상화: 공통적인 부분만 하나로 모은 것
- 다형성: 같은 모양의 함수가 상황에 따라 다르게 동작하는 것
- 오버로딩: 함수의 매개 변수 숫자, 타입 등을 다르게 해서 사용하는 기법
- 오버라이딩: 상위 클래스의 메소드를
하위 클래스에서 똑같은 이름으로 재정의하는 것
- 정보 은닉: 캡슐화 정보들을 밖에서 접근 불가능하도록 하는 것
- 상속성: 부모 클래스에서 새로운 기능을 추가해 자식 클래스를 만들어 사용하는 기법
- 객체지향 설계 원칙
- 단일 책임 원칙(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. 객체지향 프로그래밍 언어: 데이터 추상화 → 객체 생성 → 상호작용 로직을 구성하는 프로그래밍 방법
- 객체지향 프로그래밍 언어 구성요소: 기본적으로 클래스 구조에서 시작. 클래스의 기본 구성요소는 변수와 메소드.
- 클래스(Class): 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
- 일반적으로, 클래스 이름 = 소스 파일명
- 프로그램은 여러 클래스로 구성됨. 실행을 위해서 main() 메소드 사용
- 객체(Object): 클래스의 인스턴스(Instance). 자신 고유의 데이터를 가지며 클래스에서 정의한 행위를 수행 가능.
- main() 메소드는 프로그램이 실행하는 진입점.
new() 연산을 통해 인스턴스를 생성함. - main() 에서 클래스부에 선언된 변수는 인스턴스를 통해 사용함
- 인스턴스에서 변수와 메소드 사용은
인스턴스명 다음에 변수명, 메소드명과 같은 형식으로 사용
- main() 메소드는 프로그램이 실행하는 진입점.
- 메소드(Method): 클래스로부터 생성된 객체를 사용하는 방법. 객체에 명령을 내림.
- 속성(Property): 한 클래스 내에 객체들이 가지고 있는 데이터 값을 단위별로 정의한 것
- 클래스(Class): 같은 종류의 집단에 속하는 속성과 행위를 정의한 것
- 접근 지정자
- public: 모든 접근을 허용
- protected: 자기 자신 클래스 및 상속받은 자식 클래스에서의 접근을 허용
- private: 자기 자신 클래스 내부의 메소드만 접근을 허용
- default: 명시하지 않은 경우. 같은 패키지라면 접근 가능.
2. 객체지향 프로그래밍 언어 기본 문법
- 데이터 타입: 원시형 자료는 char, boolean, byte, short, int, long.
비원시 자료형은 원시형 자료형을 묶은 단독의 자료형.
- 변수와 메소드: 변수는 데이터를 저장하기 위한 메모리 공간에 대한 이름. 크기를 알아야 필요한 공간 확보 가능.
- 변수 선언 방법: [접근제어자] 타입 변수명
- 접근제어자: 변수의 접근 범위를 지정한 것.
public, private, protected, default 등. - 타입: 자료형으로 타입을 지정한 것
- 접근제어자: 변수의 접근 범위를 지정한 것.
- 변수 유형
- 멤버 변수(Member Variable): 클래스부에 선언된 변수.
인스턴스 변수와 클래스 변수로 구분됨. - 인스턴스 변수(Instance Variable): 클래스가 인스턴스될 때
초기화되는 변수. 인스턴스로만 접근 가능. - 매개 변수(Parameter): 메소드에 인자로 전달되는 값을 받기 위한 변수.
메소드 내에서 지역변수처럼 사용. - 지역변수(Local Variable): 메소드 내에서 선언된 변수.
멤버 변수와 동일한 이름 가능. 지역적으로 우선일 때 사용. - 클래스 변수(Class Variable): static으로 선언된 변수.
인스턴스 생성 없이 클래스 이름의 변수명으로 사용 가능.
main() 메소드에서 참조 가능.
- 멤버 변수(Member Variable): 클래스부에 선언된 변수.
- 메소드: 특정 객체의 동작이나 행위를 정의한 것.
'[접근제어자] 리턴 타입 메소드명([인자..]) { }'- 접근제어자: 메소드의 접근 범위를 지정함
- 리턴 타입: 함수 내에서 결과를 보내는 위치. 리턴이 없다면 void를 사용.
- 연산자(Operator): 프로그램에서 변수의 값들을 계산하기 위해 사용함
(대입연산, 사칙연산, 비트연산, 관계연산 등)
- 변수 선언 방법: [접근제어자] 타입 변수명
디자인 패턴: 객체지향 프로그래밍 시 문제에 대한 설계 사례를 분석하여 해결하기 위한 방법론
- 디자인 패턴 구조
- 콘텍스트(Context): 문제가 발생하는 여러 상황을 기술
- 문제(Problem): 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술
- 해결(Solution): 문제를 해결하도록 설계를 구성하는 요소들과 책임 관계, 협력 관계를 기술
- 디자인 패턴의 종류
- GoF 디자인 패턴: 23가지의 디자인 패턴이 있고, 구현 방식에 따라
생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류함. - GoF 디자인 패턴의 분류:
- GoF 디자인 패턴: 23가지의 디자인 패턴이 있고, 구현 방식에 따라
생성 패턴 | 구조 패턴 | 행위 패턴 |
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): 응용소프트웨어를 제어하는 컴퓨터 프로그래밍 언어
- 스크립트 언어 특징: 최종 사용자가 응용프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 도와줌
- 인터프린터 언어(=컴파일러 언어): 코드를 작성함과 동시에
인터프리터가 기계어로 번역하고 실행함 - 단순한 구문: 타 프로그래밍 언어에 비해 단순한 구문과 의미를 내포함
- 컴파일 시간 소요: 컴파일된 프로그램보다 실행 시간이 오래 걸림
- 신속한 활용: 빠르게 배우고 작성하기 위해 고안된 언어기 때문
- 인터프린터 언어(=컴파일러 언어): 코드를 작성함과 동시에
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(비주얼베이직) 기반의 스크립트 프로그래밍 언어
- 스크립트 프로그래밍 원리
- 스크립트 코드 작성: 최초 스크립트 코드를 작성함
- Byte Code 변환: 스크립트 엔진은 위에서부터 한 줄씩 해석하며
가상 머신이 이해할 수 있게 변환함 - 기계어 변환: 가상 머신은 Byte Code를 CPU가 이해할 수 있는 기계어로 변환함
- 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 확장자를 갖는 외부 파일 형태로 작성 가능
- 영역 내부의 태그 내부에 자바스크립트 코딩을 작성함
- .js 확정자를 갖는 외부 자바스크립트 코드 파일을 생성하고 적용함
'----------고2---------- > 응용 프로그래밍' 카테고리의 다른 글
[고2 응용 프로그래밍] SQL developer (11) | 2024.10.02 |
---|---|
[고2 응용 프로그래밍] (JS) (0) | 2024.03.20 |