본문 바로가기

스터디스터디/정처기

[실기] 알고리즘 표현 방법 & 프로그래밍 언어 특성

최초 작성일: 2024-09-15

최종 작성일: 2024-09-15

목표 : 정처기 합격 및 CS 지식 쌓기

 

 

 

 

Section1. 알고리즘 표현 방법 및 변수 표기법 & 프로그램 언어 특성

Section1. 알고리즘 표현 방법 및 변수 표기법

 

알고리즘 = 문제를 해결하기 위한 것

프로그램을 만들다 보면 변수를 표기하는 방법 = 이름

 

1.    알고리즘 표현 방법

(1)   자연어

우리가 일상적으로 사용하는 언어로 알고리즘을 자유롭게 표현한다

라면 포장지에 있는 조리법등이 이에 해당한다

이해하기 쉽지만, 모호성이나 해석의 여지가 있을 수 있다

(2)   의사코드(pseudo code)

프로그래밍 언어의 형식을 모방하여 알고리즘을 표현한 코드이다

실제 프로그래밍 언어로 실행할 수는 없으며, 알고리즘의 논리적 구조를 명확하게 표현하는 데 사용된다

(3)   순서도(flow chart)

기호와 도형을 사용하여 문제 해결의 흐름이나 프로세스를 시각적으로 표현한다

과정과 절차를 순서대로 나타내며, 복잡한 알고리즘을 이해하기 쉽게 돕니다

(4)   나씨 슈나이더만 차트

구조적 프로그래밍의 순차, 선택, 반복 구조를 시각형으로 도식화하여 표현하는 기법이다

특징 : 도형을 이용/ 순차, 선택, 반복 구조를 표현/ goto 구조 표현이 어렵다/ 상자도표 라고도 불린다

(5)   UML (Unified Modeling Language)

소프트웨어 시스템의 구조와 설계를 시각적으로 표현하는 데 사용되는 표준화된 모델링 언어이다

다양한 유형의 다이어그램을 통해 복잡한 시스템을 효과적으로 표현할 수 있다

정적(구조), 동적(데이터의 흐름) 다이어그램이 있음

2.    변수 표기명

(1)   카멜 표기법

여러 단어가 결합된 경우, 첫 단어를 제외하고 각 단어의 첫 글자를 대문자로 표기한다

주도 메서드나 변수명에 사용된다

Ex) flowChart/addYear

(2)   파스칼 표기법

모든 단어의 첫 글자를 대문자로 표기한다

클래스나 네임스페이스의 이름에 주로 사용 된다

Ex) FlowChart

(3)   스네이크 표기법

모든 단어를 소문자로 표기하고 단어 사이에 언더바를 사용한다

Flow_chart

(4)   헝가리안 표기법

변수의 자료형이나 특성을 나타내는 접두사를 붙여 변수의 용도를 명시한다

변수의 타입을 쉽게 구별할 수 있게 한다

Ex) strFlowChart/intCount

(5)   케밥 표기법

모든 단어를 소문자로 표기하고 단어 사이에 하이픈을 사용한다

Ex) flow-chart

 

 

Section 2. 프로그램 언어 특성

1.    프로그래밍 언어의 유형 분류

(1)   개발 편의성 측면의 분류

분류 설명
저급 언어 컴퓨터가 직접 이해할 수 있는 언어
실행속도가 빠르지만 기계마다 기계어가 달라 호환성이 없고 유지관리가 어렵다
고급 언어 인간이 이해할 수 있는 소스코드로 되어 있는 언어
실행을 위해 저급언어로 번역하는 과정이 필요한다
파이썬 등
컴파일러 : 번역하는 것 ( 많은 양의 데이터를 번역)
인터프리터 : 통역하는 것 ( 한줄 한줄 번역)
어셈블리어 : 어셈블리어로 되어 있는 것을 번역

(2)   실행 및 구현방식에 따른 분류

분류 설명
명령형 언어 컴퓨터가 수행해야할 절차를 기술하여 프로그래밍 상태 변경에 중점을 둠
함수형 언어 데이터 처리를 수학적 함수 계산으로 취급하며, 상태 변경과 가변 데이터를 피함
논리형 언어 논리문장을 사용하여 프로그램을 표현하며 조건이 만족되면 연관된 규칙이 실행됨
객체형 언어 객체 간의 메시지 통신을 통해 동작함

(3)   빌드 방식에 따른 분류

분류 설명
컴파일 언어 소스코드를 컴퓨터가 이해할 수 있는 목적코드로 변환하여 실행함
인터프리터 언어 소스코드를 한줄씩 실행하며, 컴퓨터가 이해할 수 있는 언어로 통역함
바이트 코드 언어 컴파일을 통해 가상 머신(JVM)이 이해할 수 있는 바이트 코드로 변환되고, 이후 가상머신이 기계어로 번역함
자바, 스칼라 등
어셈블리 언어 인간이 이해하기 쉬운 형태의 기호를 사용하여 작성되며, 어셈블러를 통해 기계어로 변환되는 언어
기계어와 거의 일대일 대응 관계에 있어 하드웨어에 매우 가깝게 작동(그래서 저급언어에 해당)
하드웨어 특정적이며, 주로 시스템 레벨 또는 하드웨어 제어 프로그래밍에 사용됨

2.    절차적 프로그래밍 언어

(1)   개념

일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 프로그래밍 언어

Procedure(루틴, 서브루틴, 메서드, 함수)를 사용하여 작성하는 프로그래밍 스타일

순차적인 처리를 중시하며, 프로그램 전체가 유기적으로 연결되는 방법 (하향식)

(2)   종류 : c 언어(이식성- 여러 sw에 호환가능, 어셈블리어의 반대로 보면 됨. 그래서 하드웨어에 종속적이지 않음), cobol, fortran, basic

 

3.    객체지향 프로그래밍 언어

(1)   개념

소프트웨어 구조를 객체로 만들고, 객체들 간의 상호작용으로 소프트웨어를 동작시키는 프로그래밍 언어

객체를 적절히 조립하고 연결하여 소프트웨어를 구성

(2)   특징

특징 설명
캡슐화 데이터와 연산을 하나로 묶어 캡슐화
객체의 세부 내용은 외부에 은폐되어 오류의 파급효과가 적음
캡슐화된 객체는 재사용이 용이함
정보은닉 객체가 자신의 정보를 외부에 숨기고 연산을 통해서만 접근을 허용
상속 상위클래스의 데이터와 연산을 하위 클래스가 물려받음
extends라는 키워드를 사용함
(implements – 인터페이스에서 상속 구현)
다형성
(polymorphism)
같은 이름의 메서드가 상황에 따라 다르게 동작하는 것
오버로딩(같은 함수인데  인자 값만 다르게)과 오버라이딩(부모 클래스에 있는 것을 재정의 하는 것)이 포함됨
추상화
(abstraction)
불필요한 부분을 생략하고 중요한 부분에만 초점을 맞추어 개략화 ( 공통의 성질을 묶는 것)

(3)   객체 지향 언어의 구성 요소

클래스

속성

메서드

객체/인스턴스 : 클래스가 메모리에 올라가는 순간 실체가 만들어 짐

메시지: 인스턴스간 주고받는 것

** 객체 지향 언어 개발의 원칙-솔리드(SOLID)
Single (
단일 책임의 원칙, 하나의 클래스에는 하나의 일만 수행) openclose(개방폐쇄 확장에는 열려있고 수정에는 닫혀있음)L(리스코프 치환 의 원칙- 자식클래스는 언제든 부모 클래스를 대체할 수 있어야 함 ) I interface 분리 원칙/Dependancy 의존성 역전의 원칙(자주 바뀌지 않은 것에 의존해라)

(4)   /단점

재사용성 및 생산성 향상/ 실행속도가 일반적으로 느림, 코딩 난이도가 높음

(5)   종류

자바, 시뮬라67,스몰토크

 

4.    스크립트 언어

(1)   스크립트 언어 개념

응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어

다른 응용 프로그램에 삽입되어 동작하는 프로그래밍 언어

(2)   종류 – java scripts, JSP(자바 서버 페이지),PHP,ASP,Pearl,파이썬

5.    선언형 언어 ( 나는 지금 부산 갈거야 라고 선언만 하고 어떻게 갈지 명시 안함)

(1)   언어 개념

프로그램이 수행해야 할 문제를 기술하는 언어

목표는 명시하지만, 알고리즘은 명시하지 않는다

가독성과 재사용성이 좋으며, 오류 발생 가능성이 적음

(2)   종류: 하스켈, sql

*원시코드: 인간이 만든 코드/목적 코드 : 기계어