알고리즘 표현 방법
- 자연어: 일상적으로 사용하는 언어
- 의사코드: 프로그래밍 언어의 형식을 모방하여 알고리즘을 표현한 코드
- 순서도: 문제해결의 흐름이나 프로세스를 시각적으로 표현
- 나씨 슈나이더만 차트: 구조적 프로그래밍의 순차, 선택, 반복 구조를 사각형으로 도식화하여 표현
특징: Goto 구조 표현이 어렵다, 상자도표라고도 불린다 - UML: 소프트웨어 시스템의 구조와 설계를 시각적으로 표현하는데 표준화된 모델링 언어
변수명 표기법
- 카멜 표기법: 여러 단어가 결합될 경우, 첫 단어를 제외하고 각 단어의 첫 글자를 대문자로 표기 ex) flowChart
- 파스칼 표기법: 모든 단어의 첫 글자를 대문자로 표기한다. ex) FlowChart
- 스네이크 표기법: 모든 단어를 소문자로 표기하고 단어 사이에 언더바(_)을 사용한다. ex) flow_chart
- 헝가리안 표기법: 변수의 자료형이나 특성을 나타내는 접두사를 붙여 변수의 용도를 명시 ex) strFlowChart
- 케밥 표기법: 모든 단어를 소문자로 표기하고 단어 사이에 하이픈(-)을 사용한다. ex) flow-chart
프로그래밍 언어의 유형 분류
개발 편의성 측면에 따른 분류
- 저급 언어
컴퓨터가 직접 이해할 수 있는 언어, 실행 속도가 빠르지만, 기계마다 기계어가 달라 호환성이 없고 유지관리가 어렵다 - 고급 언어
인간이 이해할 수 있는 소스코드로 되어 있는 언어, 실행을 위해 저급 언어로 번역하는 과정이 필요
실행 및 구현 방식에 따른 분류
- 명령형 언어
- 함수형 언어
- 논리형 언어
- 객체지향 언어 (객체 간의 메세지 통신을 통해 동작 ex) JAVA, C++ 등)
빌드 방식에 따른 분류
- 컴파일 언어: 소스코드를 컴퓨터가 이해할 수 있는 목적 코드로 변환하여 실행 ex) C, C++ 등
- 인터프리터 언어: 소스코드를 한 줄씩 실행하며, 컴퓨터가 이해할 수 있는 언어로 통역함 ex) BASIC, Python 등
- 바이트 코드 언어: 컴파일을 통해 가상 머신이 이해할 수 있는 바이트 코드로 변환되고, 이후 가상 머신이 기계어로 번역함 ex) JAVA, Scale 등
- 어셈블리 언어: 인간이 이해하기 쉬운 형태의 기호를 사용하여 작성되며, 어셈블러를 통해 기계어로 변환되는 언어, 기계어와 거의 일대일 대응 관계에 있어 하드웨어에 매우 가깝게 작동, 하드웨어 특정적이며, 주로 시스템 레벨 또는 하드웨어 제어 프로그래밍에 사용됨(저급 언어)
원시 코드: 인간이 만든 코드
목적 코드: 컴퓨터가 동작할 수 있도록 만든 코드
절차적(구조적) 프로그래밍 언어 (하향식)
일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 프로그래밍 언어
장점
- 함수를 통한 코드 재활용성 증가
- 컴퓨터 처리 구조와 유사하여 실행 속도가 빠름
절차적 언어의 종류
- C 언어: 시스템 프로그래밍 언어로 개발됨, 운영체제 개발에 사용, 이식성이 뛰어남 ex) 리눅스
- COBOL
- FORTRAN
- BASIC
유닉스(90% 어셈블리 언어, 10% C 언어)
객체지향 프로그래밍 언어 (상향식)
소프트웨어 구조를 객체로 만들고, 객체들 간의 상호작용으로 소프트웨어를 동작시키는 프로그래밍 언어
객체를 적절히 조립하고 연결하여 소프트웨어 구성
객체지향 프로그래밍 언어 특징
- 캡슐화
- 정보은닉
- 상속: 상위클래스의 데이터와 연산을 하위 클래스가 물려받음 (extends라는 키워드를 사용)
- 다형성: 같은 이름의 메서드가 상황에 따라 다르게 동작 (오버로딩, 오버라이딩)
- 추상화
캡슐화, 정보은닉 예시
class Person:
def __init__(self, name, age):
self.__name = name # 비공개 속성
self.__age = age # 비공개 속성
def get_info(self):
return self.__name, self.__age
p = Person("Alice", 30)
print(p.get_info()) # 출력: ('Alice', 30)
# print(p.__name) # AttributeError: 'Person' object has no attribute '__name'
- self.__name과 self.__age는 비공개 속성으로, 클래스 외부에서 p.__name 또는 p.__age로 접근하려고 하면 AttributeError가 발생합니다.
- 비공개 속성에 접근하기 위해 get_info 메서드를 사용합니다.
파이썬에서는 클래스 속성 이름 앞에 밑줄 두 개(__)를 붙여서 비공개 속성(private attribute)을 정의합니다. 이는 속성이 클래스 내부에서만 접근 가능하게 하며, 외부에서는 직접 접근할 수 없게 만듭니다.
객체지향 프로그래밍 구성 요소
클래스는 속성(id, pw..)과 메서드(행위) 으로 이루어져 있고
클래스가 실체화된 걸 객체(인스턴스)라고 한다.
인스턴스끼리 주고 받는 건 메시지라고 한다.
객체지향 프로그래밍 언어의 종류
- JAVA
- 시뮬라67
- 스몰토크
스크립트 언어
- 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어
- 다른 응용 프로그램(ex: html)에 삽입되어 동작하는 프로그래밍 언어
- 대표적으로 Javascript가 있다. (브라우저를 제어한다)
스크립트 언어의 종류
- 자바스크립트: HTML 문서 내에 삽입되어 사용되며, 동적인 웹 페이지 제작 가능
- JSP(JavaServer Pages): HTML 페이지 안에 자바 코드를 직접 삽입하여 웹 서버에서 동적 웹 페이지 생성
- PHP: 서버 측 스크립트 언어로 HTML 문서 안에서 사용(게시판같은 동적인 웹문서 만들 때 사용), 리눅스, 아파치 웹서버, MySQL DB 환경에서 주로 사용됨
- ASP(Active Server Pages)
- Perl
- Python: 객체지향 스크립트 언어, 컴파일 과정이 필요 없으며, 다양한 플랫폼에서 사용 가능
- VBScript
선언형 언어
- 프로그램이 수행해야 할 문제를 기술하는 언어
- 목표는 명시하지만, 알고리즘은 명시하지 않는다.
- 가독성과 재사용성이 좋으며, 오류 발생 가능성이 적음
선언형 언어의 종류
- 하스켈: 순수 함수형 프로그래밍 언어
- SQL(Structured Query Lanaguage): 데이터베이스를 관리하기 위한 특수 목적의 프로그래밍 언어
'Algorithm' 카테고리의 다른 글
lv 0. 합성수 찾기 (0) | 2023.01.24 |
---|---|
lv.0 자릿수 더하기 (0) | 2023.01.24 |
lv.0 배열 문제 (0) | 2023.01.23 |
lv 0. 짝수, 홀수 문제 (0) | 2023.01.23 |
lv.0 문자열 문제 (0) | 2023.01.23 |