포스트

34. 프로그래밍 언어 활용

34. 프로그래밍 언어 활용

언어특성 활용

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

개발 편의성 측면에 따른 분류

저급 언어 | Low-Level Language

  • 컴퓨터가 직접 이해할 수 있는 언어

  • 실행속도는 빠르나 기계마다 기계어가 상이하여 호환성이 없고 유지관리가 어려움

고급 언어 | High-Level Language

  • 인간이 이해할 수 있는 소스코드로 되어 있는 언어

  • 실행을 위해서 저급언어로 번역하는 과정이 필요

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

명령형 언어 | Imperative Language

  • 컴퓨터가 동작해야 할 절차를 통해 프로그래밍의 상태를 변경시키는 구문에 중점을 둔 방식

  • FORTRAN, C 등

함수형 언어 | Functional Language

  • 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임 중 하나

  • LISP, Scala 등

논리형 언어 | Logic Language

  • 논리 문장을 이용하여 프로그램을 표현하고 조건이 만족되면 연관된 규칙이 실행되는 방식

  • PROLOG 등

객체지향 언어 | Object-Oriented Language

  • 객체 간의 메시지 통신을 이용하여 동작하는 방식

  • JAVA, C++ 등

빌드 방식에 따른 분류

컴파일 언어 | Compile Language

  • 소스코드를 목적 코드로 변환하여 실행하는 방식

  • 소스코드를 컴퓨터가 이해할 수 있는 언어로 번역을 하는 방식

  • C, C++ 등

인터프리터 언어 | Interpreter Language

  • 소스코드를 한 줄씩 실행하는 방식

  • 소스코드를 컴퓨터가 이해할 수 있는 언어로 통역을 하는 방식

  • BASIC, Python 등

바이트 코드 언어 | Byte Code Language

  • 컴파일을 통해 가상머신이 번역할 수 있는 Byte Code로 변환되고, 가상머신이 기계어로 번역하는 방식

  • JAVA, Scala 등


절차적 프로그래밍 언어

개념

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

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

  • 순차적인 처리를 중요시 여기며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

장 & 단점

장점

  • 함수를 통해 코드의 재활용성이 높아짐

  • 컴퓨터의 처리 구조와 유사하며 실행 속도가 빠름

단점

  • 프로그램 분석이 어려움

  • 유지보수나 코드의 수정이 어려움

종류

C 언어

  • 1972년 데니스 리치에 의해 개발

  • 운영체제를 작성하기 위한 시스템 프로그래밍 언어로 개발

  • 이식성이 뛰어남

COBOL

  • 금융 및 인적 자원과 같은 비즈니스 컴퓨터 프로그램을 위해 설계

  • 4개의 DIVISION으로 구성

FORTRAN

  • 과학 계산용으로 주로 사용되는 언어

BASIC

  • 교육용으로 개발되어 언어의 문법이 쉬움

객체지향 프로그래밍 언어

개념

  • 만들고자 하는 소프트웨어의 구조를 객체로 만들고, 객체들끼리 상호작용하도록 만드는 프로그래밍 언어

  • 객체들을 적절히 조립하고, 연결하여 소프트웨어가 동작하도록 만드는 것

특징

캡슐화 | Encapsulation

  • 데이터와 연산을 하나로 묶어 캡슐처럼 만드는 것

  • 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급효과가 적음

  • 캡슐화된 객체들은 재사용이 용이

정보 은닉 | Information Hiding

  • 다른 객체에게 자신의 정보를 숨기고 자신만의 연산만을 통하여 접근을 허용하는 것

상속 | Inheritance

  • 상위 클래스의 데이터와 연산을 하위 클래스가 물려받는 것

  • Private한 요소 외의 모든 내용을 하위 클래스가 사용 가능

  • Extends라는 키워드를 사용

다형성 | Polymorphism

  • 메시지를 통해 연산을 수행할 때, 같은 이름을 가진 여러 메서드 중 특정 메서드가 호출되는 것

  • 오버로딩과 오버라이딩 존재

추상화 | Abstarction

  • 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화

장 & 단점

장점

  • 재 사용성

  • 생산성 향상

  • 자연적인 모델링

  • 유지보수의 우수성

단점

  • 개발속도가 느림

  • 실행 속도가 대체적으로 느림

  • 코딩 난이도 상승

종류

JAVA : 객체지향언어의 대표적 언어
시뮬라67 : 최초의 객체지향언어
Smalltalk : 최초로 GUI를 제공하는 언어
Objective-C : 애플의 운영체제인 iOS에서 사용되는 언어
C++ : 객체지향성이 더해진 C언어의 확장성
Python : 플랫폼 독립적이며 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어


스크립트 언어

개념

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

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

  • 최종 사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 해줌

종류

JavaScript

  • HTML 문서 내에 삽입되어 사용되며, 동적인 인터렉티브한 페이지를 만들 수 있게 함

JSP | Java Server Pages

  • HTML 페이지 안에 JAVA 코드를 직접 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹브라우저가 표현할 수 있도록 전달해 주는 스크립트 프로그래밍 언어

PHP

  • HTML 문서 안에 포함하여 작동하는 서버 측 스크립트 프로그래밍 언어

  • 리눅스 운영체제에 Apache 웹서버를 설치하고 MySQL DB 환경에서 PHP 프로그래밍 언어가 주로 사용

ASP

  • MS의 Windows 서버에서 운영되는 스크립트 방식의 웹 프로그래밍 언어

Perl

  • 유닉스 계열의 운영체제에서 사용하는 스크립트 프로그래밍 언어

Python

  • 네덜란드 암스테르담의 귀도 반 로썸이 개발한 객체지향 스크립트 프로그래밍 언어

  • 별도의 컴파일 과정이 필요 없음

  • 리눅스나 윈도우 등 특정 플랫폼에 독립적

VBScript

  • MS Visual Basic 기반의 스크립트 프로그래밍 언어

선언형 언어

개념

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

  • 목표를 명시하고 알고리즘은 명시하지 않음

  • 가독성이나 재사용성이 좋고 오류가 적음

종류

Haskell : 함수형 프로그래밍 언어
HTML : 웹 콘텐츠의 의미와 구조를 정의할 때 사용
SQL : 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어


C 언어

변수

개념

  • 값을 저장해 놓는 기억공간

  • 변수에 저장된 데이터의 값은 언제든지 변경될 수 있음

  • 변수마다 정해진 자료형이 있고, 할당된 값을 가지고 있음

작성 규칙

  • 모든 변수는 사용되기 전에 선언

  • 영문자 또는 언더바( _ )로만 시작 가능

  • 중간에 숫자와 언더바를 사용 가능

  • 중간에 공백 불가

  • 언더바 이외의 특수문자는 사용 불가

  • 대소문자를 구분

  • 예약어(void, int, for 등)는 변수로 사용 불가

예약어

자료형

  • char, int, float, double, enum, void, struct, union, short, long, signed, unsigned 등

기억 분류

  • auto, register, static, extern

제어문

  • if, else, for, while, do, switch, case, default, break, continue, return, goto

기타

  • sizeof, const, volatile

자료형

  • 효율적인 메모리 사용을 위하여 여러 종류의 자료형 존재

C 언어 자료형

종류데이터 타입크기
문자형char1Byte
 unsigned char1Byte
정수형Short2Byte
 int4Byte
 long4Byte
 long8Byte
 long long8Byte
실수형float4Byte
 double8Byte
 long double8Byte

JAVA 언어 자료형

종류데이터 타입크기
논리형boolean1bit
문자형char2Byte
정수형byte1Byte
 short2Byte
 int4Byte
 long8Byte
실수형float4Byte
 double8Byte

선언

`자료형 변수명 = 값;

  • int cnt = 10; // cnt 변수를 정수형으로 선언하고 초기값 10을 대입

  • int cnt; // cnt 변수를 정수형으로 선언하고, 초기값이 없을 때, 쓰레기 값이 대입

  • char a = ‘C’; // a 변수를 문자형으로 선언하고, 초기값 C를 대입

잘못된 변수명의 예

  • 43User; // 첫 문자는 언더바나 영문으로만 시작 가능

  • my Data; // 중간 공백 삽입 불가

  • continue; // 예약어 사용 불가


연산자

산술 연산자

+ : 더하기
- : 빼기
* : 곱하기
/ : 나누기
% : 나머지
++ : 1증가
-- : 1감소

관계 연산자

> : 크다
>= : 크거나 같다
< : 작다
<= : 작거나 같다
== : 같다
!= : 같지 않다

논리 연산자

&& : AND
|| : OR
! : NOT

비트 연산자

& : 비트 AND
| : 비트 OR
~ : 비트 not
^ : 비트 XOR
<< : 좌 비트 이동
>> : 우 비트 이동

삼항 연산자

? : : 3항 연산

대입 연산자

+= : 덧셈 후 대입
-= : 뺄셈 후 대입
*= : 곱셈 후 대입
/= : 나눗셈 후 대입
%= : 나머지 후 대입

연산자 우선순위

  1. 단항 연산자 : ++, ==, !
  2. 산술 연산자 : *, /, +, -
  3. 시프트 연산자 : <<, >>
  4. 관계 연산자 : >, <, >=, <=, ==, !=
  5. 비트 연산자 : &, ^, |
  6. 논리 연산자 : &&, ||
  7. 삼항 연산자 : ? :
  8. 대입 연산자 : =, +=, -=, *=, /=, %=

입출력 함수

printf() / scanf()

  • 가장 많이 사용하는 표준 입출력함수로, 헤더파일에 정의

출력 변환 문자

%d : 10진수
%o : 8진수
%x : 16진수
%f : 실수
%c : 문자 1개
%s : 문자열

getchar() / putchar()

  • 단일 문자를 입출력하는 버퍼형 입출력 함수

gets() / puts()

  • 문자열을 입출력 하는 입출력 함수

  • 인자로 주소값을 입력 받음


제어문

if 문

  • 조건식의 결과에 따라 중괄호{ }에 묶어놓은 블록의 실행 여부가 결정되는 조건문

  • 조건식에는 true 또는 false 값을 산출할 수 있는 boolean 변수가 옴

  • C언어에서는 0은 false, 0이 아닌 나머지는 모두 true로 인식

  • 중괄호 블록이 없으면 다음에 있는 한 줄의 명령만 실행

switch 문

  • 비교할 변수가 어떤 값을 가지냐에 따라 실행문을 선택

  • 해당 실행문 수행 후 break 문을 만날 때까지 모든 실행문을 실행


반복분

for 문

  • 반복의 횟수가 정해진 반복문

  • 자체적으로 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문

while 문

  • 특정 조건을 만족할 때까지 계속해서 주어진 명령문을 반복 실행

do~while 문

  • 무조건 한 번 반복을 실행한 후 조건식을 검사하여 조건에 만족하는 동안 반복 실행

continue 문

  • continue 문을 만나게 되면 더 이상 아래의 명령문들을 실행하지 않고, 반복의 다음 처리로 이동

break 문

  • break 문을 만나게 되면 반복문을 종료하고 그 이후의 명령문을 실행

함수

개념

  • 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합

변수의 유효 범위

지역 변수 | Local variable

  • 블록 내에서 선언되고, 블록이 종료되면 메모리에서 사라짐

  • 메모리상의 스택영역에 저장되며, 초기화 하지 않으면 쓰레기값으로 초기화

전역 변수 | Global variable

  • 프로그램의 어디에서나 접근할 수 있도록, 함수의 외부에 선언된 변수

  • 프로그램이 종료되면 메모리에서 사라짐

  • 메모리 상의 데이터 영역에 저장되며, 초기화 하지 않으면 0으로 초기화

정적 변수 | Static variable

  • static 키워드로 선언한 변수

  • 단 한번만 초기화되고, 프로그램이 종료되면 메모리에서 사라짐

  • 지역 변수와 전역 변수의 특징을 모두 가짐


배열 & 포인터 & 구조체

1차원 배열

  • 같은 자료형의 변수를 연속적으로 묶어 놓은 저장공간

  • 메모리상의 물리적 위치에도 연속적으로 저장

2차원 배열

  • 같은 자료형의 변수를 행과 열의 연속적인 공간으로 묶어 놓은 저장공간

포인터

  • 메모리의 주소값을 저장하는 변수, 포인터 변수라고도 함

  • & | 주소 연산자 : 변수의 주소값을 알 수 있는 연산자

  • * | 참조 연산자 : 변수의 주소값을 알 수 있는 연산자

구조체

  • 여러 변수들을 모아서, 하나의 객체를 구성할 때 사용하는 사용자 정의 타입 객체

C언어 표준 라이브러리

stdio.h

  • 표준 입출력
    • printf(), scanf(), getchar(), fopen(), fseek() 등

string.h

  • 메모리와 문자열의 처리
    • strcat(), strcmp(), strcpy(), strlen() 등

ctype.h

  • 문자 검사 및 변환
    • isalnum(), isalpha(), isgraph(), tolower() 등

match.h

  • 삼각함수, 지수 절댓값 함수 등 수학 함수
    • sin(), cos(), tan(), log(), exp(), fmod(), sqrt(), abs() 등

stdlib.h

  • 메모리 동적 할당, 가상 난수 발생, 문자열 변환
    • malloc(), free(), rand(), strtod(), atof() 등

malloc.h

  • 메모리 할당에 관한 함수
    • calloc(), malloc(), free() 등

time.h

  • 날짜와 시간 그리고 내부 클락
    • clock(), ctime(), asctime(), ftime(), time(), getdata() 등

JAVA 언어

역사

  • 자바는 1980년대 초, 미국 Sun 사의 Jmmes Gosling이 가전제품에 이용할 목적으로 개발

  • 인터넷이 확산되며 90년대부터 관심을 받기 시작

특징

  • 이식성이 높은 언어

  • 객체 지향 언어

  • 메모리를 자동으로 관리

  • 다양한 어플리케이션 개발

  • 멀티 쓰레드 구현

  • 동적로딩 지원

  • 오픈 소스 라이브러리가 풍부

기본 구성

Class

  • 객체가 가지고 있는 속성과 연산의 구조를 정의

  • 속성은 멤버변수로, 연산은 메서드로 정의

Member variable

  • 객체의 속성을 정의

  • 해당 객체가 가지고 있는 고유한 값

Method

  • 특정 작업을 수행하기 위한 명령문의 집합

  • 멤버변수의 값이나, 상태를 변경할 수 있는 명령의 집합

접근지정자

  • 클래스의 멤버변수와 메서드를 외부에서 접근할 수 있는 범위를 지정

  • public : 접근 제한 없음클래스, 패키지, 상속, 전체
  • protected : 동일 패키지와 상속받은 클래스클래스, 패키지, 상속
  • default : 동일 패키지클래스, 패키지
  • private : 동일 클래스클래스

인스턴스

  • 클래스를 통해서 실제로 구현된 구체적인 실체

  • 실제로 메모리에 할당된 상태

객체 정의와 생성

  • 현실 세계를 객체로 표현

객체지향 특징

생성자

  • 인스턴스가 만들어질 때, 초기값 등을 지정하는 역할

  • 자바에서 생성자는 해당 클래스의 이름과 같아야 함

  • 생성자는 인자를 다르게 하여 여러 개를 가질 수 있음

예외 처리 | Exception Handling

  • 프로그램 실행 중에 발생하는 예외를 처리해주는 방법

  • 예외 사항이 발생했을 때 프로그램이 자연스럽게 종료될 수 있도록 처리

상속 | Inheritance

  • 부모클래스의 멤버를 자식클래스에서 그대로 쓸 수 있음

  • 클래스를 재사용할 수 있기 때문에 효율적이고 개발기간을 단축시킴

  • 부모의 private 한 멤버는 상속받을 수 없음

  • extends 라는 키워드를 사용

Method Overriding

  • 상속 관계에서 부모 클래스에서 정의된 메서드를 다시 재정의

  • 추상 클래스나 인터페이스를 상속받을 때 사용되는 개념

  • 부모 메서드의 이름, 리턴 타입, 매개변수의 개수와 유형이 완전히 동일

Method Overloading

  • 같은 이름의 메서드를 인자만 다르게 하여 중복 정의하는 것

  • 메서드의 이름이 같아야 하고 인자의 개수나 타입이 달라야 함


추상 클래스와 인터페이스

추상 클래스 | Abstract class

  • 반드시 오버라이딩해서 사용할 미완성의 메서드를 하나 이상 가진 미완성 클래스

  • 추상 클래스를 상속받은 자식 클래스에서 추상 메서드를 구현해서 사용

  • 추상 클래스는 객체를 생성할 수 없음

인터페이스 | Interface

  • 추상 클래스의 극단으로 모든 메서드가 추상적인 형태

Python

소개

  • 네덜란드 출신의 프로그래머인 Guido van Rossum이 1989년에 개발한 프로그래밍 언어

  • 구글에서 만들어진 소프트웨어의 50% 이상이 파이썬으로 만들어짐

특징

  • 컴파일 과정이 필요없는 스크립트 언어

  • 동적 타이핑을 지원

  • 플랫폼 독립적

  • 간결하고 쉬운 문법

  • 높은 확장성 및 이식성

  • 수많은 표준 라이브러리 존재

이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.