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 언어 자료형
| 종류 | 데이터 타입 | 크기 |
|---|---|---|
| 문자형 | char | 1Byte |
| unsigned char | 1Byte | |
| 정수형 | Short | 2Byte |
| int | 4Byte | |
| long | 4Byte | |
| long | 8Byte | |
| long long | 8Byte | |
| 실수형 | float | 4Byte |
| double | 8Byte | |
| long double | 8Byte |
JAVA 언어 자료형
| 종류 | 데이터 타입 | 크기 |
|---|---|---|
| 논리형 | boolean | 1bit |
| 문자형 | char | 2Byte |
| 정수형 | byte | 1Byte |
| short | 2Byte | |
| int | 4Byte | |
| long | 8Byte | |
| 실수형 | float | 4Byte |
| double | 8Byte |
선언
`자료형 변수명 = 값;
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항 연산
대입 연산자
+= : 덧셈 후 대입
-= : 뺄셈 후 대입
*= : 곱셈 후 대입
/= : 나눗셈 후 대입
%= : 나머지 후 대입
연산자 우선순위
- 단항 연산자 :
++, ==, ! - 산술 연산자 :
*, /, +, - - 시프트 연산자 :
<<, >> - 관계 연산자 :
>, <, >=, <=, ==, != - 비트 연산자 :
&, ^, | - 논리 연산자 :
&&, || - 삼항 연산자 :
? : - 대입 연산자 :
=, +=, -=, *=, /=, %=
입출력 함수
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% 이상이 파이썬으로 만들어짐
특징
컴파일 과정이 필요없는 스크립트 언어
동적 타이핑을 지원
플랫폼 독립적
간결하고 쉬운 문법
높은 확장성 및 이식성
수많은 표준 라이브러리 존재