[비개발자용] 정처기 프로그래밍 언어 기초 - 5과목 프로그램밍 언어
목차
알고리즘을 위한 방법에 대한 표현
컴퓨터에 프로그램밍에 쓰이는 알고리즘을 표현하는 방식은 간단하게 말하면 아래와 같습니다.
- 자연어
- 사람이 사용하는 언어를 통해 프로그램 또는 컴퓨터의 작동 방식을 설명하는 방법입니다.
- 자연어는 일반적으로 사람들 사이의 의사소통에 사용되는 언어입니다.
- 의사코드
- 프로그램의 동작 방식을 간략하게 설명하는 가상의 코드입니다.
- 의사코드는 실제 프로그래밍 언어의 문법을 따르지 않지만, 프로그램의 주요 기능과 알고리즘을 설명하기 위해 사용됩니다.
- 순서도
- 프로세스의 흐름을 그림으로 나타내어 각 단계를 시각적으로 이해하기 쉽게 하는 방법입니다.
- 순서도는 프로세스의 시작부터 끝까지의 단계를 표시하고, 각 단계 간의 관계를 화살표로 연결하여 나타냅니다.
- 나씨슈나이더만 차트
- 프로세스를 계층적으로 표현하여 복잡한 시스템의 구조를 이해하기 쉽게 돕는 차트입니다.
- 각 단계는 상위 수준과 하위 수준으로 나뉘며, 각 단계 간의 관계를 시각적으로 나타냅니다.
- ULM
- 소프트웨어 시스템의 구조와 설계를 시각적으로 표현하는 데 사용되는 표준화된 모델링 언어입니다.
변수명 표기법
- 카멜표기법 (Camel Case)
- 설명: 카멜표기법은 여러 단어로 이루어진 변수명이나 함수명을 표기할 때 각 단어의 첫 글자를 대문자로 쓰되, 첫 단어를 제외한 나머지 단어의 첫 글자를 대문자로 쓰는 방식입니다.
- 이를 통해 변수나 함수의 이름이 마치 낙타의 혹처럼 생겼다하여 카멜표기법이라고 부릅니다.
- 예시: camelCaseExample, calculateInterestRate
- 파스칼표기법 (Pascal Case)
- 파스칼표기법은 카멜표기법과 비슷하지만, 첫 단어의 첫 글자도 대문자로 쓰는 것이 다릅니다.
- 주로 클래스명을 지을 때 사용됩니다.
- 예시: PascalCaseExample, CalculateInterestRate
- 스네이크 표기법 (Snake Case)
- 스네이크 표기법은 각 단어를 밑줄(_)로 구분하여 사용하는 방식입니다.
- 주로 변수명이나 파일명을 표기할 때 사용됩니다.
- 최근에 많이 사용되는 표기법입니다.
- 예시: snake_case_example, calculate_interest_rate
- 헝가리안 표기법 (Hungarian Notation)
- 헝가리안 표기법은 변수명 앞에 그 변수가 어떤 타입인지를 나타내는 접두사를 붙이는 방식입니다.
- 이는 변수의 타입을 한눈에 알아볼 수 있게 해줍니다. 하지만 현재는 많이 사용되지 않는 표기법입니다.
- 예시: strName (문자열을 의미), nCount (정수를 의미)
- 케밥 표기법(KEBAB caSE)
- 모든 단어를 소문자로 표기하고, 단어 사이에 하이픈(-)으로 표기합니다.
- 예시 : apple-banana
프로그래밍 언어 용어
프로그래밍 언어 레벨
레벨 | 설명 | 예시 |
저급 언어 | 하드웨어와 직접 상호 작용하는 언어. 기계어나 어셈블리어와 유사함. 컴퓨터에 가까울수록 저급! |
어셈블리어 (Assembly), 기계어 (Machine Code) |
고급 언어 | 사람이 이해하기 쉽고 추상화된 문법을 사용하는 언어. 대부분의 개발 작업은 이 레벨에서 이루어짐. |
자바 (Java), 파이썬 (Python), C++ |
실행 구현 방식에 따른 분류
- 명령형(impreative) 언어
- 설명: 명령형 언어는 프로그램의 상태를 변경하는 명령문의 연속으로 구성됩니다.
- 실행 구현 방식: 명령문의 순차적 실행에 의존합니다.
- 예시: C, C++, 자바 등
- 함수형(funtional) 언어
- 설명: 함수형 언어는 함수를 일급 객체로 취급하고 함수 조합을 통해 작업을 수행하는데 중점을 둡니다.
- 실행 구현 방식: 함수 조합 및 순수 함수 호출에 의존합니다.
- 예시: Haskell, Scala, Clojure 등
- 논리형(logic) 언어
- 설명: 논리형 언어는 논리 문장의 집합으로 문제를 표현하고 해결하는 데 중점을 둡니다.
- 실행 구현 방식: 논리 문장의 해석과 논리 연산에 기반합니다.
- 예시: Prolog
- 객체지향(object-oriented)언어
- 설명: 객체지향 언어는 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어 객체를 만드는데 중점을 둡니다.
- 실행 구현 방식: 객체의 메서드 호출 및 상속을 통해 실행됩니다.
- 예시: Java, C++, Python 등
컴퓨터 언어 번역(빌드) 에 따른 분류
- 컴파일 언어
- 설명: 컴파일 언어는 소스 코드를 컴파일(목적코드 변환)하여 기계어로 변환한 후 실행합니다. 실행 파일은 특정 플랫폼에서 직접 실행됩니다.
- 사람이 작성한 원시코드를 목적코드를 변환하여 실행
- 예시: C, C++, Go 등
- 빌드 과정: 소스 코드를 컴파일러로 컴파일하여 실행 파일을 생성합니다.
- 인터프리터 언어
- 설명: 인터프리터 언어는 소스 코드를 한 줄씩 읽어들여 실행합니다. 소스 코드를 직접 실행하여 결과를 즉시 반환합니다.
- 예시: Python, Ruby, JavaScript 등
- 빌드 과정: 소스 코드를 실행할 때마다 인터프리터가 필요하며, 별도의 컴파일 단계가 없습니다.
- 바이트 코드 언어
- 설명: 바이트 코드 언어는 중간 단계의 바이트 코드를 생성하고, 이를 플랫폼별 가상 머신에서 실행합니다. 바이트 코드는 플랫폼에 독립적이며, 가상 머신에서 해석됩니다.
- 예시: Java, C# (C Sharp) 등
- 빌드 과정: 소스 코드를 컴파일하여 바이트 코드를 생성하고, 이를 해당 가상 머신에서 실행합니다.
- 어셈블리 언어
- 인간이 이해하기 쉬운 형태의 기호를 사용하여 작성되며, 어셈블러를 통해 기계어로 변환되는 언어
- 기계어와 거의 일대일로 대응관계에 있어 하드웨어에 매우 가깝게 작동됩니다.
- UNIX는 10%의 어셈블리 언어로 이루어짐
- 저급언어
절차적 프로그래밍 언어란?
절차적 프로그래밍 언어는 프로그램을 일련의 절차나 단계로 나누고, 각 단계를 차례대로 실행하여 문제를 해결하는 방식으로 프로그래밍하는 언어를 가리킵니다.
이러한 언어에서는 명령문의 순차적인 실행에 중점을 두며, 데이터와 프로시저(Procedure(루틴,서브루틴,메서드,함수)를 분리하여 프로그램을 작성합니다.
하향식으로 진행됩니다.
절차적 프로그래밍 언어 장/단점
장점 | 단점 |
이해하기 쉽다 | 유지보수가 어려울 수 있음 |
메모리 관리가 용이함 | 병렬 처리가 어려울 수 있음 |
빠른 실행 속도를 제공함 | 추상화 수준이 낮을 수 있음 |
절차적 언어 종류
- C 언어
- C 언어는 절차적 프로그래밍 언어로서 저수준의 메모리 조작이 가능하며, 시스템 프로그래밍부터 응용 프로그래밍까지 다양한 분야에서 사용됩니다.
- COBOL (Common Business-Oriented Language)
- COBOL은 업무용 프로그래밍에 주로 사용되는 고급 프로그래밍 언어로, 절차적 프로그래밍 스타일을 따릅니다. 주로 금융 및 회계 시스템에서 사용됩니다.
- BASIC (Beginner's All-purpose Symbolic Instruction Code)
- BASIC은 초기에는 학습용으로 개발되었지만, 후에 절차적 프로그래밍 언어로 널리 사용되었습니다. 간단한 문법과 사용자 친화적인 접근 방식으로 인해 교육 및 개인용 컴퓨팅에서 널리 사용되었습니다.
객체 지향 프로그래밍이란?
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍의 패러다임 중 하나로, 현실 세계의 개념을 프로그래밍에 반영하여 프로그램을 구성하는 방법입니다.
객체지향 프로그래밍 언어 특징
비개발자분들은 클래스, 속성, 메서드, 인스턴스가 헷갈릴 수 있습니다.
JAVA에 대한 설명, 즉 객체지향에서 많이 쓰이는 변수, 메서드, 생성자, 멤버, 인스턴스에 대한 설명도 확인해보세요.
- 추상화(Abstaction)
- 불필요한 부분을 생략하고 중요한 부분에만 초점을 맞추어 개략화
- 공통의 성질을 묶는 것을 말합니다.
- 클래스(Class)
- 클래스는 데이터와 해당 데이터를 처리하는 메서드(함수)를 포함하는 사용자 정의 데이터 유형입니다.
- 클래스는 객체를 생성하기 위한 설계도와 같은 역할을 합니다.
- 객체(Object)
- 객체는 클래스의 인스턴스로서, 실제로 메모리에 할당된 데이터입니다.
- 각 객체는 고유한 상태(속성)와 행동(메서드)을 가집니다.
- 상속(Inheritance)
- 상속은 클래스들 간의 계층 구조를 나타냅니다.
- 부모 클래스(상위 클래스 또는 슈퍼 클래스)의 특성과 기능을 자식 클래스(하위 클래스 또는 서브 클래스)가 상속받아 재사용할 수 있도록 합니다.
- extends라는 키워드 사용
- 다형성(Polymorphism)
- 다형성은 같은 이름의 메서드가 서로 다른 동작을 수행할 수 있는 능력을 나타냅니다.
- 다형성을 통해 코드의 유연성과 재사용성이 높아집니다.
- 오버로딩 : 같은 메서드에 다른 함수를 씁니다.
- 오버라이딩 : 부모와 같은 메서드를 재정의하는 것입니다.
- 정보은닉(Information Hiding)
- 객체가 자신의 정보를 외부에 숨기고, 연산을 통해서만 접근을 허용
- 캡슐화(Encapsulation)
- 캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어 외부에서의 접근을 제어하는 개념입니다.
- 이를 통해 데이터를 보호하고 응집도를 높이며, 코드의 재사용성과 유지보수성을 향상시킵니다.
- private으로 선언하면 해당 변수가 나만의 클래스에서 쓸 수 있습니다.
- 이를 get메서드 혹은 set메서드로 불러오는 걸 캡슐화라고 합니다.
객체지향 개발 원칙도 시험에 잘나옵니다. SOLID(single, open, liskov, interface, Dependency)에 대해서도 꼭 알아두셔야합니다.
single : 단일 책임
open close : 확정-개방 수정- 폐쇠
liskov : 자식은 부모를 대체해야함
interface : 불필요한 인터페리스를 만들지 않아함
Dependency : 자주 바뀌지 않는 것에 의존해야한다. (고수준 모듈은 저수준 모듈에 의존 금지)
객체지향 프로그램밍 언어 장점/단점
장점 | 단점 |
코드 재사용성이 높음 | 학습 곡선이 높을 수 있음 |
모듈화가 용이함 | 메모리 소비가 크고 실행 속도가 상대적으로 느릴 수 있음 |
유지보수 및 확장이 용이함 | 설계 시간이 오래 걸릴 수 있음 |
캡슐화를 통한 데이터 보호 | 객체 간의 관계를 설계하는 데 시간이 많이 소요될 수 있음 |
코드의 가독성이 높음 |
객체 지향 프로그래밍 언의 종류
- Java: Java는 강력한 객체 지향 프로그래밍 기능을 제공하며, 플랫폼 독립적인 특성으로 널리 사용되고 있습니다.
- C++: C++은 C 언어의 기능을 확장하여 객체 지향 프로그래밍을 지원합니다. 메모리 관리와 성능에 대한 직접적인 제어가 가능하며, 시스템 및 응용 프로그래밍에 널리 사용됩니다.
- Python: Python은 간결한 문법과 높은 가독성으로 유명하며, 객체 지향 프로그래밍을 지원합니다. 다양한 응용 분야에서 사용되고 있습니다.
- C#: C#은 Microsoft에서 개발한 객체 지향 프로그래밍 언어로, .NET 프레임워크를 기반으로 합니다. Windows 플랫폼 및 웹 개발에 널리 사용됩니다.
- Ruby: Ruby는 간결한 문법과 동적 타입 시스템을 가지고 있으며, 객체 지향 프로그래밍을 중심으로 설계되었습니다. 웹 개발 프레임워크인 Ruby on Rails로 유명합니다.
- Swift: Swift는 Apple에서 개발한 객체 지향 프로그래밍 언어로, iOS 및 macOS 애플리케이션 개발에 사용됩니다.
- Kotlin: Kotlin은 JetBrains에서 개발한 객체 지향 프로그래밍 언어로, Java와의 상호 운용성이 뛰어나 안드로이드 애플리케이션 개발에 널리 사용됩니다.
스크립트 언어란?
응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어
스크립트 언어(Scripting language)는 주로 스크립트 프로그래밍 또는 동적 프로그래밍 언어라고도 불리며, 스크립트 파일이나 명령어로 실행되는 프로그램을 작성하기 위한 프로그래밍 언어를 가리킵니다.
스크립트 언어는 보통 인터프리터나 컴파일러를 통해 실행되며, 보통은 런타임 시에 한 줄씩 해석되어 실행됩니다.
스크립트 언어의 종류
언어 | 설명 |
JavaScript | 웹 페이지의 동적 기능을 구현하는 데 사용되는 클라이언트 사이드 스크립트 언어 HTML에 삽입되어 사용 |
JSP | Java Server Pages의 약자로, Java 코드를 HTML 페이지에 삽입하여 동적인 웹 페이지를 생성하는 데 사용됨 |
PHP | 서버 측 스크립트 언어로, 웹 개발에 널리 사용되며 동적인 웹 페이지를 생성하고 데이터베이스와 상호 작용하는 데 사용됨 |
ASP | Active Server Pages의 약자로, Microsoft에서 개발한 서버 측 스크립트 언어로, 동적인 웹 페이지를 생성하고 웹 애플리케이션을 구축하는 데 사용됨 현재는 지원이 끝김 |
Perl | Practical Extraction and Reporting Language의 약자로, 텍스트 처리와 시스템 관리 등 다양한 용도로 사용되는 인터프리터 언어 |
Python | 다목적 프로그래밍 언어로, 간결한 문법과 풍부한 라이브러리로 인해 다양한 분야에서 사용되는 스크립트 언어 |
VBScript | Visual Basic Script의 약자로, Microsoft에서 개발한 스크립트 언어로, 웹 개발과 시스템 관리에 사용됨 |
선언형 언어란?
선언형 언어(Declarative language)는 명령형 언어와는 달리 컴퓨터에게 어떤 일을 수행할 지를 직접 명령하는 것이 아니라 원하는 결과를 기술하는 방식으로 프로그래밍하는 언어를 가리킵니다
. 즉, 프로그래머가 어떤 작업을 수행할지에 대한 절차나 순서를 명시적으로 지정하는 대신 원하는 결과를 설명합니다.
- 하스켈 (Haskell)
- 하스켈은 순수 함수형 프로그래밍 언어로, 선언형 언어의 한 유형입니다.
- 함수형 프로그래밍에서는 프로그램을 함수의 조합으로 표현하며, 프로그램의 상태를 변경하지 않고 입력에 대한 출력만 생성합니다.
- 하스켈에서는 데이터를 변이시키는 대신, 함수를 이용하여 데이터를 변환하고 조작합니다.
- 강력한 정적 타입 시스템과 패턴 매칭, 레이지 평가 등의 특징을 가지고 있습니다.
- HTML (Hypertext Markup Language)
- HTML은 웹 페이지를 생성하기 위한 마크업 언어입니다.
- HTML은 구조적으로 문서를 정의하고, 웹 브라우저에게 문서를 표시하는 방법을 설명합니다.
- HTML은 선언형 언어이며, 사용자는 문서의 구조와 콘텐츠를 설명하고 브라우저에게 어떻게 표시할지에 대해 명령하지 않습니다.
- SQL (Structured Query Language)
- SQL은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 조작하고 관리하기 위한 언어입니다.
- SQL은 데이터베이스에서 원하는 데이터를 선언하는 데 사용되며, 원하는 결과를 얻기 위한 조건을 지정합니다.
- SQL은 선언형 언어로, 사용자는 데이터베이스에서 어떤 데이터를 원하는지만을 명시하고 데이터베이스 시스템이 해당 결과를 생성하도록 요청합니다. 사용자는 데이터를 어떻게 검색하고 조작할지에 대한 명령을 직접 제공하지 않습니다.
댓글