4차산업시대 필수교육 · AI 코딩(알고리즘과 C·자바·파이썬 ) 프로그래밍 언어
☞ 알고리즘(초급,중급,고급)과 C언어(초급,중급,고급)학습내용 ☜ – 1 – | ||
◑ 독립문컴퓨터학원 코딩 교육 학습 진도표 ◐ | ||
구분 | 학습 목차 | 학습 내용 |
독립문컴퓨터학원
알 고 리 즘
초급 과정과 C 언어 초급과정 학습내용
| 프로차트(문제분석) 기호 숙지 | 시작,끝,처리,비교,반목,출력 |
변수와 상수 구별 및 대입문(=)과 비교판단(if) goto문 개념 숙지 | c언어의 특징 숙지 및 #include<stdio.h>헤더파일 과 main()함수의 와 return문 역활 기억장소,정수,실수 구분 int , float ,char | |
수 증가 공식 i=i+1; 활용과 알고리즘 교육 및 printf()함수와 정수출력 %d. 실수출력 %f 실습 | . 1~10까지자연수 생성 후 출력하기 | |
. 1~10까지 짝수 생성 후 출력하기 | ||
. 1~10까지 홀수 생성 후 출력하기 | ||
. 1~10까지 3의배수 생성 후 출력하기 | ||
. 1~10까지 5의배수 생성 후 출력하기 | ||
누적 합공식 s=s+i 활용 알고리즘 교육 | . 1~10까지 자연수의 합 구하기 | |
. 1~10까지 짝수의 총합 구하기 | ||
. 1~10까지 홀수의 총합 구하기 | ||
. 1~10까지 3의배수의 총합 구하기 | ||
. 1~10까지 5의배수의 총합 구하기 | ||
. 1~10까지 짝수와 홀수의 총합을 동시 구하기 | ||
수 증가공식(i=i+!)과 s=s+i 누적합공식 동시활용 교육 | . 1~10까지 자연수 출력 및 자연수의 총합구하기 | |
. 1~10까지 짝수 출력 및 짝수의 총합구하기 | ||
. 1~10까지 홀수 출력 및 홀수의 총합구하기 | ||
. 1~10까지 3의배수출력 및 3의배수 총합구하기 | ||
. 1~10까지 5의배수출력 및 5의배수 총합구하기 | ||
. 소수와 약수 판별 알고리즘 | ||
. 최대공약수와 최소 공배수 구하기 | ||
. 피보나치 수열의 총합 구하기 | ||
. 1!+2!+3!+~~~+10! 펙토리까지 총합구하기 | ||
실수계산 응용 교육 | s=1/2+1/3+1/4+1/5+~~~+1/10 총합 구하기 | |
s=1/(2*3)+2/(3*4)+~~~+8(9*10) 총합 구하기 | ||
s=1/(10*1)+1/(9*2)+~~+1/(2*9) 총합 구하기 | ||
부호 변환의 수열의합 구하기 | s=1-2+3-4+5-6+7-8+9-10 | |
MOD(나머지 구하기)활용교육 ( 배수 찾기 연습 ) | . 1~10까지 짝수출력및짝수의총합구하기(mod사용) | |
. 1~10까지 홀수출력및홀수의총합구하기(mod사용) | ||
. 1~10까지 3의베수 출력 및 3의배수 총합구하기 (mod사용) | ||
. 1~10까지 5의베수 출력 및 5의배수 총합구하기 (mod사용) | ||
값 외부 입력 스켄 함수인 scanf()함수 활용 교육 | .n값을 입력받아서 1에서 n까지의 수의 총합 | |
.n값을 입력받아서 1에서 n까지의 짝수의 총합 | ||
.n값을 입력받아서 1에서 n까지의 홀수의 총합 | ||
반복문(for문) 활용 교육 | 위 전단계에에서 배운 모든 문제를 for문으로 순서도를 각각 작성 및 코딩 결과가 동일한지 | |
다중반복문(중첩for문)작성 및 다중 반복문 분석요령 교육 | 반복문 안에 반복문을 넣어서 처리하는 예제 삼각형 모양 출력 예제 10까지와 구구단 출력 |
☞ 알고리즘(초급,중급,고급)과 C언어(초급,중급,고급)학습내용 ☜ -2- |
||
◑ 독립문컴퓨터학원 코딩 교육 학습 진도표 ◐ |
||
구분 |
학습 목차 |
학습 내용 |
독립문컴퓨터학원 알 고 리 즘 중급과정 과 C 언어 초급 과정 학습내용 |
1차 배열 정의와 활용 알고리즘 |
. 1차배열을 이용한 최대값 찾는 알고리즘 |
. 1차배열을 이용한 최소값 찾는 알고리즘 |
||
. 1차배열을 이용한 최대값과 최소값 동시 구하기 |
||
. 1차배열을 이용한 등수(석차) 구하는 알고리즘 |
||
. 1차배열을 이용한 소수 판별 알고리즘 |
||
. 1차배열을 이용한 소인수 분해 알고리즘 |
||
. 1차배열을 이용한 선택정열(오름차순/내림차순) 정령알고리즘 |
||
. 1차배열을 이용한 버블정열(오름차순/내림차순) 정령알고리즘 |
||
. 1차배열을 이용한 병합정열 알고리즘 |
||
. 1차배열을 이용한 2분검색 알고리즘 |
||
. 1차배열을 이용한 10진수와 2진수의 변환 |
||
. 1~10까지 3의배수의 총합 구하기 |
||
. 1~10까지 5의배수의 총합 구하기 |
||
. 1~10까지 짝수와 홀수의 총합을 동시 구하기 |
||
2차 배열을 이용한 행우선/열우선 배열 채우기 알고리즘 |
. 2차 배열을 이용한 행우선/열우선 배열 |
|
. 2차 배열을 이용한 삼각형모양 배열 채우기 알고리즘 7가지 |
||
. 2차 배열을 이용한 모래식계 모양 배열 채우기 알고리즘 2가지 |
||
. 2차배열을 이용한 달팽이 모양으로 배열 채우기 알고리즘 |
||
. 2차배열을 이용한 마름모 모양으로 배열 채우기 알고리즘 |
||
. 2차배열을 이용한 ‘ㄹ’자 모양배열 채우기 알고리즘 |
||
. 2차배열을 이용한 배열 회전 시키는 알고리즘 |
||
. 2차배열을 이용한 행우선/열우선 배열 채우기 알고리즘 |
||
. 2차배열을 이용한 행우선/열우선 배열 채우기 알고리즘 |
||
알 고 리 즘 고급 과정과 C 언어 중급 과정 학습내용 |
성적처리 프로그램 작성1 (1차 배열 이용) |
. 5명의 3과목 성적처리 프로그램 작성 이름은 입력 받지 않고 등수도 구하지 않는 성적프로그램 작성 |
. 5명의 3과목 성적처리 프로그램 작성 이름은 입력 받고 등수도 구하는 성적프로그램 작성 |
||
. 1차배열을 이용해 본인이 학교에서 학습 하고 있는 과목 전체를 이용한 성적프로그램 작성 |
||
성적처리 프로그램 작성2 ( 2차 배열 이용 ) |
. 5명의 3과목 성적처리 프로그램 작성 이름은 입력 받고 등수도 구하는 성적프로그램 작성 |
|
. 2차 배열을 이용해 본인이 학교에서 학습하고 있는 과목 전체를 이용한 성적프로그램 작성 |
☞ 알고리즘(초급,중급,고급)과 C언어(초급,중급,고급)학습내용 ☜ – 3 – | ||
◑ 독립문컴퓨터학원 코딩 교육 학습 진도표 ◐ | ||
구분 | 학습 목차 | 학습 내용 |
독립문컴퓨터학원 C 언어 중급 과정 학습 내용 | C프로그램 구조 | . c프로그램 구조와 실행 순서 . 전처리기(#include)와 헤더화일이란? . 주석문과 들여쓰기 키워드와 식별자 |
변수의 종류 구별 및 printf 포멧 형식 실습 | . 정수int(%d)/실수float(%f)/문자char(%c)/ 문자열char(%s) / 나열형enum 자료형 종류 파악 | |
상수의 종류 구별 및 내부 표현 방식 printf 포멧 형식 실습 | . 정수상수 출력서식/실수상수출력서식/문자상수출력 / 문자열상수 출력서식/나욜형상수 출력서식 | |
. 10진수 출력/16진수 출력/8진수 출력 / 아스키 코드 값 출력 | ||
연산자 (operator) | . 단항연산자(!,~,+,-,/,*,++,–,&,sizeof) . 대입연산자( =,+=,-=,*=,/= . 산술연산자( +,-,*,/) . shift 연산자(<< , >> ) . 관계연산자(>,<,>=,<=,!~=,== ) . 논리연산자( &,^,| ,&&,|| . 삼항연산자( 조건식 ? 값1 : 값2 ) . 콤마(,) 연산자 와 연산자의 우선순위 | |
조건문 ( if문 ) 과 조건문 (switch~case문과 break 역활 ) | . 조건문 if 와 else 구문 이해 (두수의 합,곱구하기) | |
. 점수를 입력 받아서 학점을 구하여 출력하기 ( if사용 과 switch문 사용으로 각 각 실습 하기) | ||
. 연봉을 입력하여 세금을 계산하여 출력하기 | ||
. 중첩 if문 활용 실습 | ||
. switch ~ case와 break문의 필요성 숙지 | ||
반복문과 중첩반복문 (반복문 내의 반복문) | . for문을 이용한 반복 처리 문제 실습 | |
. while 문을 이용한 반복 처리 문제 실습 | ||
. do ~ while 문을 이용한 반복 처리 문제 실습 | ||
. 반복문 과 continue, break ,goto문 과의 관계 | ||
함수 기본 | . 함수의 의미와 함수원형, 함수정의, 함수호출 | |
. 함수가 있는 프로그램 구조파악 | ||
. 함수의 인자와 반환값 4가지 구조 함수 파악 | ||
. 재귀함수의 특징과 활용법 실습 | ||
. 시스템 라이브러리함수 이해 | ||
. 난수 만들기 (rand()함수와 seed=time(null) | ||
. srand( time(NULL)) 활용법 숙지 | ||
. 주사위 게임 만들기 과 사칙연산 게임 | ||
. 가위, 바위, 보 게임 프로그램 | ||
. 1~45 숫자 중 로또복권 번호 생성기 프로그램 |
☞ 알고리즘(초급,중급,고급)과 C언어(초급,중급,고급)학습내용 ☜ – 4 – | |||
◑ 독립문컴퓨터학원 코딩 교육 학습 진도표 ◐ | |||
구분 | 학습 목차 | 학습 내용 | |
독립문컴퓨터학원
C 언어 고급 과정
학습내용 | 변수의 범위와 기억부류 | . 지역변수와 전역변수 . 변수의 유효 범위 . 자동변수와 외부변수, 정적변수, | |
포인터( 램의 주소 번지 값) | . 주기억장치인 메모리 주소와 | ||
. 1차배열과 포인터의 관계 숙지 | |||
. 2차배열과 포인터의 관계 숙지 | |||
. 함수에서 배열 이용하는법 | |||
. 함수인자에서 포인터사용법 (값에의한 전달과 주소에 의한 | |||
. 다중 포인터와 포인터 배열 숙지 | |||
. 함수 포인터와 함수포인터 배열 | |||
. 사칙연산을 위한 함수포인터 배열 | |||
문자열 | . 문자열 기본과 문자열 집합체 | ||
. 여러 문자열 배열 처리방법 과 | |||
. 문자열 입출력 함수( getc()와 ( getchar() 와 getche() ) ( fgets() 와 fputs() ) | |||
. 문자열 함수 strcmp() , strcpy(), | |||
유도 자료형 | 구조체 자료형 | . 구조체 정의와 변수 선언 struct ~ | |
. 구조체 변수와 구조체 블록 정의 | |||
. typedef를 이용한 구조체 정의하기 | |||
. 구조체 초기값 지정과 구조체 멤버 | |||
. 구조체 포인터와 배열관계 숙지 | |||
. 함수에서의 구조체 사용법 | |||
공용체 자료형 | . 공용체 union ~ 사용법과 특징 | ||
열거형 자료형 | . 열거형 enum ~ 사용법과 특징 | ||
응용학습 게임 프로그램 만들기 | . 지뢰찾기 게임 ( 2차배열과 함수 | ||
. 고양이 게임 과 공룡 게임 | |||
. 뱀(Snake) 게임 | |||
. 슈팅게임 | |||
파일 처리 | . 파일 만들기오픈 fopen(), 파일 닫기 | ||
. 텍스트 파일 읽기( rt ) 와 텍스트 | |||
. 파일저장 fprintf()과 파일내용 읽기 한 줄의 자료 쓰기와 읽기 | |||
.파일 문자열 입출력 fgets()와 feof(), ferror() 사용법 | |||
. 바이너리화일(그림,음악,동영상) 읽기인 fread()와 2진화일쓰기 인 | |||
. 텍스트화일과 바이너리화일 구별법 | |||
. 임의 접근 파일 처리( 파일포인터와 SEEK_SET / SEEK_CUR / SEEK_END | |||
. 파일삭제(remove()와 파일 이름 | |||
메모리 동적할당 과 고급 처리 | . 함수 malloc()으로 필요한 자료형의 | ||
. 메모리 초기화와 재할당 함수 | |||
. 자기참조 구조체의 표현 및 출력 | |||
. 구조체로 표현하는 연결 리스트 | |||
. 구조체 노드생성 /구조체 노드추가 | |||
시스템 정의 매크로와 #if | . 시스템 정의 매크로 #if #elif() . 컴파일 시간과 날짜 출력 . #ifdef 와 #ifndef . 매크로 연산자와 #과 , ## , #undef |
> C언어 등장 배경[
- 켄 톰슨(Ken Thompseon)이 벨 연구소에서 MULTICS 운영체제를 개조하여 유닉스를 만들던 중 기계마다 운영체제를 제작하다시피 하여 만드는 애로사항을 해결하고자 이식성이 좋고, 호환성이 좋은 언어로 제작하여야겠다는 필요성을 가졌다.
- 이때 데니스 리치(Dennis Ritchie)가 B 언어를 개조하여 1972년 C 언어를 제작하고, 이를 이용하여 유닉스를 다시 만들게 된다.
- 사용자가 늘어남에 따라 매뉴얼이나 지속적인 작업이 이루어지지 않아 초기에 개발 회사나 사용 회사별로 C 언어가 혼란을 겪게 된다.
- 미국 ANSI 협회에서 ANSI-C를 규정하고 이때부터 ANSI-C를 표준으로 각 회사들이 개성 있게 제작을 시작한다.
- 이후 1982년 C++이 개발되며 더욱 성장하게 된다.
> C언어 제작 과정
- 1958년 : 프로그래밍 언어의 이론과 개념의 등장
- 1960년 : 국제 정보처리 학회 연합(IFIP)에서 알골을 제작
- 1966년 : 케임브리지 대학교에서 마틴 리처드(Martin Richards)가 BCPL을 설계
- 1970년 : 톰프슨(Kenneth L. Thompson)이 BCPL을 개량하여 B 언어를 제작
- 1972년 : 데니스 리치(Dennis Ritchie)에 의해 C 언어가 개발
> C 언어의 특징
- 이식성이 뛰어나다.
- C 언어는 다른 프로그래밍 언어보다 높은 호환성을 가지고 있고 C 언어의 표준 함수로만 작성된 프로그램은 어떤 기종의 컴퓨터에서도 정상적으로 컴파일되고 실행될 수 있다.
- 양면성 기능을 가지는 언어이다.
- C 언어는 High Level Language와 Low Level Language의 특징을 동시에 가진다. 즉, 저 수준과 고 수준의 제어가 모두 가능한 언어이다.
- 다양한 연산자를 가지는 언어이다.
- 다양한 연산자를 가지고 있기 때문에 원하는 방식대로 다양한 프로그래밍이 가능하다.
- 다양성을 가진다.
- C 언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphic User interface), 시스템 프로그램(System program), 응용 프로그램(Application Program)과 같이 다양한 분야에서 사용할 수 있도록 설계된 효율적인 프로그램 언어이다.
- 모듈러 프로그래밍 언어이다.
- C언어는 함수 기반의 언어이다. 프로그램의 시작인 main 함수와 다양한 여러 함수를 사용하여 간단하게 프로그래밍이 가능하다.
- Free Format 코딩 형식을 가지는 언어이다.
- 새로운 자료형(struct)을 정의하여 사용할 수 있으므로 형식이 자유롭다.
- 전처리기를 사용하는 언어이다.
- 컴파일(실행) 전 사전적으로 확인이 가능한 기능을 가짐으로써 전체적인 흐름 분석을 하기 용이하다.
- 포인터를 사용하는 언어이다.
- 메모리를 직접 제어할 수 있어 위험도가 높지만 디테일한 코딩이 가능하다. 포인터의 사용은 C언어에서만 가능하다.
- 절차 지향적 특징을 지니고 있다.
> C 언어의 단점[
- 유닉스를 기술하기 위한 언어로서 개발되었기 때문에 유닉스가 가진 약점을 그대로 가지고 있다.
- 자료형의 검사 기능이 미약하다.
- 혼합 연산의 경우 연산 우선순위에 따라 자동 계산되므로 연산 우선순위를 모르면 잘못된 계산 결과를 얻을 수 있다.
- 프로그램을 모듈화하지 않으면 이해하기 어려운 프로그램이 되는 경우가 많다.
다른 컴퓨터 언어와 비교
C 언어와 C++
C언어는 절차지향적 언어(Procedural)이고, C++은 객체지향적 언어(Multi Paradigm)이다. 하지만 엄밀히 따지면 C++은 멀티 패러다임 언어이며 객체지향과 절차지향 모두 구현이 가능하다. C를 한 단계 확장시킨 언어이다. C는 절차적 언어이기 때문에 순차적 수행이 되도록 하는 것이 중요하다. 하지만 C++은 추상적인 개념을 통해서 구성을 한 후 그것들을 조합하는 방식으로 만들어진다. 즉, C는 하향식 접근 방식으로 코딩을 하지만 C++은 상향식 접근 방식으로 코딩하는 것을 선호하는 언어이다. C++은 물론 하향식 접근 방식으로도 코딩이 가능하다. [3]
C 언어와 자바
자바 또한 객체지향 언어로 개발된 지 오래 지났음에도 불구하고 여전히 소프트웨어 개발의 주축이다. 기계와 근접한 위치에서 실행되거나 하드웨어를 직접 다루는 경우 C 언어는 컴파일 시 바로 기계코드로 컴파일이 되어 프로세스에 의해 직접 실행된다. 따라서 중간 코드인 바이트 코드로 컴파일되며 인터프리터가 바이트 코드를 기계코드로 다시 변환하는 자바의 경우 제한된 메모리를 최적으로 사용해야 하는 프로그램에는 C 언어가 유용하다.
C 언어와 C#
C#이라는 언어는 자바를 MS에서 만들어낸 J#이라는 언어를 보완해서 만들어낸 언어이다. C, C++, 자바의 장점들을 모아 만들었지만 C보다는 자바와 더 비슷한 언어이다. 하지만 C#은 장점이 많은 만큼 단점도 많은 언어이다. C#의 경우에는 윈도우에서만 사용이 가능하다. .NET(닷넷)라는 프로그램을 사용하는데 닷넷은 윈도우에서밖에 설치가 되지 않기 때문에 윈도우가 아닐 경우 사용할 수 없다. C#의 가장 큰 단점이라고 할 수 있다. 그리고 C와 C++에 비해 속도가 느리다는 단점도 가지고 있다. [5]
C 언어와 파이썬
파이썬의 경우에는 C언어와 비교하여 문법이 간결하여 가독성이 높다는 장점이 있다. 또한 C언어에서는 변수의 자료형을 선언하고 프로그래밍을 하지만 파이썬의 경우 프로그램을 입력, 시동하는 동시에 자료형이 결정된다. 하지만 C언어와 C++ 그리고 자바와는 다르게 아직까지 국내에서 인지도가 많이 떨어지는 편이기 때문에 독학을 한다던가 자료를 구하기에 어려움이 조금 있다.
> C언어 활용 분야
- C 언어는 까다롭고 다루기 어렵지만, 빠른 연산이 필요한 곳에서 높은 효율을 발휘한다. 게임처럼 용량이 높으면서도 연산과 속도가 빨라야 하는 분야에서는 C와 C++을 활용하는 것이 일반적이다.
- 컴퓨터를 사용하는 과정을 단순하게 만들고 한눈에 보기 쉽게 만들어주는 운영체제 및 시스템을 구축하는 분야에도 C언어는 주력으로 사용된다.
- 모바일 프로그래밍의 대표주자는 JAVA이다. 안드로이드의 경우는 JAVA를 주력 언어로 사용 중이지만 IOS(iPhone OS)에서는 C언어를 사용한다. [7]
> C언어 기초 문법
º 메인 함수
C 언어는 절차지향 언어로 main 함수 하나만을 호출하여 main 함수가 끝날 때까지 실행한다. 만약 main 함수에서 다른 함수를 호출하는 경우 해당 경로를 따라가서 해당 함수를 실행 후 다시 메인 함수로 돌아온다. main 함수는 1개의 프로그램에는 단 하나만 존재할 수 있다. 또한 반드시 하나는 존재해야 한다.
º 헤더 파일의 선언
헤더 파일이란 미리 작성해놓은 함수들의 모임이다. 프로그램을 만들 때 가장 앞에 헤더 파일을 선언하여 해당 헤더 파일 안에 있는 함수들을 쓸 수 있게 한다.
#include <stdio.h> int main(void) { printf("Hello, C"); return 0; }
이 문장은 printf 함수를 이용해 Hello, C라는 문장을 출력하고자 하는 것이다. 이때 맨 위에 작성된 #include <stdio.h>는 표준 입출력 헤더 파일인 stdio.h 헤더 파일을 선언하는 부분이다. 이 부분을 작성하지 않으면 main 함수는 printf 함수를 모르기 때문에 오류가 발생한다. 반드시 사용할 함수가 들어있는 헤더 파일을 프로그램의 가장 앞에 선언해야 한다.
º 헤더 파일의 종류
헤더 파일의 분류는 크게 표준 라이브러리 헤더 파일과 사용자 정의 헤더 파일로 나눌 수 있다.
- 표준 라이브러리 헤더 파일
- 표준 라이브러리 헤더 파일은 개발 프로그램의 내부에 미리 선언되어있어 가져와 사용기만 하면 된다.
- 해당 헤더 파일의 예로는 stdlib.h , stdio.h , math.h, string.h , time.h 등 다양한 헤더 파일이 있다.
- 표준 라이브러리 헤더 파일은 개발 프로그램의 내부에 미리 선언되어있어 가져와 사용기만 하면 된다.
- 사용자 정의 헤더 파일
- 사용자 정의 헤더 파일은 사용자가 직접 헤더 파일을 정의하는 것을 의미한다.
º 세미콜론( ; )
세미콜론을 안 붙이게 되면 컴파일 에러가 발생한다. 컴파일러는 해석을 할 때 세미콜론(;)을 만나게 되면 문장이 끝났다고 판단한다. 세미콜론을 만나지 못할 경우에는 문장이 끝나지 않은 것으로 해석하기 때문에 컴파일 구문 오류가 발생한다. 따라서 한 문장이 끝나면 세미콜론( ; )을 쓰는 것으로 마친다.
- 예외의 경우
- if, for, while 문의 경우 해당 문장에는 세미콜론을 쓰지 않는다. (do while의 경우 while 문이지만 세미콜론을 붙인다.)
> C언어 전망
C 언어는 B 언어를 기반으로 탄생했다. 지금도 이미 C 언어를 기반으로 혹은 다른 언어들을 기반으로 새로운 언어들이 개발되고 있다. 하지만 현재에도 C 언어는 많은 개발 회사들이 사용하는 주력 언어이다. C 언어의 장점인 간결하고 효율적인 개발이 가능하다는 점 때문이다. 많은 언어들이 C언어 이후에 등장했음에도 C 언어는 여전히 프로그래밍에 있어서 핵심적인 언어로 평가 받는다. 특히 임베디드 시스템에서는 큰 인기를 끌고 있다. 앞으로도 오랜 시간 동안 C 언어는 프로그래밍에 있어서 가장 중요한 언어 중 하나 일 것이다.
자바 (프로그래밍 언어)
패러다임 | 프로그래밍 패러다임: 객체 지향 프로그래밍 (클래스 기반 프로그래밍), 구조적 프로그래밍, 명령형 프로그래밍, 제네릭 프로그래밍, 반영, 병행 컴퓨팅 |
---|---|
설계자 | 제임스 고슬링 |
개발자 | 썬 마이크로시스템즈 |
발표일 | 1995년 5월 23일(28년 전)[1] |
라이선스 | GNU 일반 공중 사용 허가서 자바 커뮤니티 프로세스 |
파일 확장자 | .java, .class, .jar |
웹사이트 | www |
주요 구현체 | |
OpenJDK, GCJ, 자바 가상 머신 | |
Java의 제네릭, 피자 | |
영향을 받은 언어 | |
에이다 83, C++, C#, 에펠, Java의 제네릭, 메사, 모듈라-3, 오베론, 오브젝티브-C, UCSD 파스칼, 오브젝트 파스칼 | |
영향을 준 언어 | |
에이다 2005, 빈셸, 체피, C#, 클로저, ECMA스크립트, 팬텀, 그루비, 해킹, 헤렉, J#, 자바스크립트, 코틀린, PHP, 파이썬, 스칼라, 씨드7, 발라, J++ |
자바(영어: Java)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작해 1995년에 발표했다. 처음에는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발되었지만 현재 웹 애플리케이션 분야에 가장 많이 사용하는 언어 중 하나이고, 안드로이드를 비롯한 모바일 기기용 소프트웨어 개발에도 널리 사용되고 있다. 현재 버전 20까지 출시했다.
자바의 개발자들은 유닉스 기반의 배경을 가지고 있었기 때문에 문법적인 특성은 파스칼이 아닌 C++의 조상인 C 언어와 비슷하다.[2] 자바를 다른 컴파일언어와 구분 짓는 가장 큰 특징은 컴파일된 코드가 플랫폼 독립적이라는 점이다. 자바 컴파일러는 자바 언어로 작성된 프로그램을 바이트코드라는 특수한 바이너리 형태로 변환한다. 바이트코드를 실행하기 위해서는 JVM(자바 가상 머신, Java Virtual Machine)이라는 특수한 가상 머신이 필요한데, 이 가상 머신은 자바 바이트코드를 어느 플랫폼에서나 동일한 형태로 실행시킨다. 때문에 자바로 개발된 프로그램은 CPU나 운영 체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템에서는 어디서나 실행할 수 있으며, 이 점이 웹 애플리케이션의 특성과 맞아떨어져 폭발적인 인기를 끌게 되었다.
> 자바 역사
자바 언어는 1991년 6월 셋톱 프로젝트를 위해 제임스 고슬링(James Gosling)이 만들었다. 이 언어는 원래 제임스 고슬링의 사무실 밖에 있던 오크 나무를 따다 오크(Oak), 혹은 그린(Green) 이라고도 불렀으나, 단어 리스트 중 무작위로 뽑은 자바(Java)를 선택했다. 고슬링의 목표는 C/C++ 스타일의 언어와 가상 머신을 구현하는 것이었다. 첫 공개 자바 버전은 1995년의 자바 1.0이었다. 한 번 쓰고 어느 곳에도 실행 “Write Once, Run Anywhere“하는 것을 약속하였고 인기 플랫폼에 무료 런타임을 제공하였다. 이 플랫폼은 꽤 안정성을 지녔고 보안 시스템은 여러 설정을 통해 네트워크 및 파일 접근을 통제할 수 있었다. 대부분의 브라우저들은 곧 자바 애플릿(Java Applet)을 웹 페이지 안에서 실행할 수 있었고 자바의 인기는 급상승했다. 자바 2(JDK 1.2 ~ 1.4)의 출현으로 여러 다양한 플랫폼에서 사용할 수 있는 설정(Configuration)들을 만들었다. 예를 들어 J2EE는 엔터프라이즈 애플리케이션을 실행할 수 있고, J2ME는 모바일 애플리케이션을 실행할 수 있다. J2SE는 스탠다드 에디션으로 지정되었다. 2006년에 마케팅용으로 Java EE, Java ME, Java SE 순서대로 명칭을 바꾸었다.
썬 마이크로시스템즈는 1997년 ISO/IEC JTC1 표준화 그룹, 그리고 나중에는 ECMA International 그룹과 접촉하여 정식 승인을 받으려 했으나 곧 이 프로세스에서 철수했다. 자바는 사실상 (de facto)의 표준이며 자바 커뮤니티 프로세스(Java Community Process)를 통해 관리되고 있다. 썬 마이크로시스템즈는 자바의 대부분을 무료로 배포하였으나 오픈이 아닌 사유 소프트웨어였다. 썬 마이크로시스템즈는 자바 엔터프라이즈 시스템 같은 특정 라이선스를 팔아서 수입을 올렸다. 썬(SUN) 사는 자사의 개발용(소프트웨어 개발 키트 (SDK))과 개발용의 일부인 실행용(자바 런타임 환경, JRE)을 구분한다. 실행용에는 컴파일러, 유틸리티 및 여러 개발용 헤더 파일이 포함되어 있지 않다.
2006년 11월 13일 썬 마이크로시스템즈는 대부분은 자바를 GPL 라이선스로 소스를 오픈하였으며 2007년 5월 8일 이 과정을 마쳤다. 썬 마이크로시스템즈가 권한을 가지고 있지 않은 대부분의 코어 부분을 오픈하였다. 2009년 4월 20일 제작사인 썬 마이크로시스템즈가 오라클과 인수 합병됨에 따라 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.
> 자바 버전
자바의 버전은 보통 Java SE 또는 JDK/JRE의 버전으로 말한다.
JDK(Java Development Kit)는 표준 라이브러리를 포함하며, JDK 버전이 바뀜에 따라 이 라이브러리가 확대되고 API가 바뀐다. 초기 1.0/1.1 버전에서 JDK/JRE의 명칭을 사용하다가 Java 1.2가 발표되면서 J2SDK/J2RE라고 개명하여 사용했으나 기존의 명칭으로 사용하는 사람들이 많아 현재는 다시 JDK/JRE의 명칭으로 돌아왔다. 또한 J2SE(Java2 Standard Edition)라는 명칭 또한 Java SE(Java Standard Edition)로 변경되었다.
자바 버전 체계의 메이저 버전(소수점 위)이 계속 1.x로 고정되어 마이너 업데이트로 여기는 경우들이 있어 1.5 버전부터 5.0(1.5), 6(1.6)의 형태로 제품 버전을 코드 버전과 별개로 발표하고 있다.
언어 자체는 자바 언어 명세(Java Language Specification, JLS)에서 정의되며, 판(edition)으로 구분한다. JDK가 확장되는 동안 언어는 2판에서 거의 변화가 없었으나, JDK 5와 함께 바뀐 JLS 3판에서 제네릭(generic) 타입, 애너테이션(annotation) 같은 기능이 도입되면서 상당히 바뀌었다.
JDK 7에서는 자바 언어에 상당한 변화가 계획되어 있었으나 JDK 7로 예정되었던 변화가 JDK 7과 JDK 8로 나뉘면서 JDK 7에는 상대적으로 사소한 언어 특성만이 추가되었다. 구체적으로 이진수 표기 추가, 가독성을 위해 수 표기에 밑줄(underscore)을 허용, 스위치 문(switch에서 문자열 사용, 제네릭 타입 객체 생성 시 타입 추론(type inference), 자동 자원 해제를 위한 try 문법, 여러 예외 타입을 동시에 잡도록 허용하는 문법 등이 추가되었다. JDK 9는 사업적으로 엄청난 변화가 있었다. 언어적인 변화보단 사용방법이 바뀌었다. 먼저 사업적으로 사용이 안된다. 이게 무슨뜻이냐면 Java 8 까진 사업적으로 가능한데 JDK 9부터 안된다는 뜻이다. 한마디로 돈을 받고 Java 프로그램을 팔수 없게된다. 하지만 사업이 아닌 개인용 & 학생용은 16까지 가능하다
버전 | 날짜 |
---|---|
JDK 베타 | 1995 |
JDK 1.0 | 1996년 1월 23일[5] |
JDK 1.1 | 1997년 2월 19일 |
J2SE 1.2 | 1998년 12월 8일 |
J2SE 1.3 | 2000년 5월 8일 |
J2SE 1.4 | 2002년 2월 6일 |
J2SE 5.0 | 2004년 9월 30일 |
Java SE 6 | 2006년 12월 11일 |
Java SE 7 | 2011년 7월 28일 |
Java SE 8 (LTS) | 2014년 3월 18일 |
Java SE 9 | 2017년 9월 21일 |
Java SE 10 | 2018년 3월 20일 |
Java SE 11 (LTS) | 2018년 9월 25일[6] |
Java SE 12 | 2019년 3월 19일 |
Java SE 13 | 2019년 9월 17일 |
Java SE 14 | 2020년 3월 17일 |
Java SE 15 | 2020년 9월 15일[7] |
Java SE 16 | 2021년 3월 16일 |
Java SE 17 (LTS) | 2021년 9월 14일 |
Java SE 18 | 2022년 3월 22일 |
Java SE 19 | 2022년 9월 21일 |
Java SE 20 | 2023년 3월 21일 |
> 철학
자바 언어는 다음 5가지의 핵심 목표를 지니고 있다.
- 객체 지향 방법론을 사용해야 한다.
- 같은 프로그램(바이트코드)이 여러 운영 체제(마이크로프로세서)에서 실행될 수 있어야 한다.
- 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.
- 원격 코드를 안전하게 실행할 수 있어야 한다.
- 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.
자바는 초기 설계부터 객체 지향 언어(객체 지향 프로그래밍)로 설계되었다. C가 C++로 진화한 것과는 차이가 있다. 그리고 같은 코드로 어떤 마이크로프로세서에서나 실행되기를 원했다. 따라서 자바만의 실행 코드인 바이트코드라는 중간 코드를 컴파일러에 의해 생성한다. 그리고 자바 가상 머신(JVM)에 의해 해석되어 실행된다. 따라서 C/C++ 코드로 작성되어 생성된 코드보다 일대일 상황이면 실행 속도가 느리다. 그러나 장점은 같은 코드로 다양한 플랫폼이나 운영 체제에서 실행될 수 있다는 점이다.
>자바 실행 코드 생성 및 마이크로프로세서와 관계
자바가 여러 개의 마이크로프로세서(CPU)에서 같은 코드가 실행되기 위해서는 C/C++의 프로그램의 실행 구조와는 다른 방식이 필요하다. C/C++가 특정 CPU의 기계어 코드를 직접 생성하면, 이 기계어 코드가 메모리에 적재되어 바로 실행된다. 따라서 C/C++는 CPU가 달라지면 컴파일러가 달라져야 한다. 임베디드 프로그램의 경우, gcc는 gcc 소스를 사용해서 특정 CPU를 지정하고, 컴파일러(x86 플랫폼에서)로 크로스 컴파일러를 만들 수 있다. x86 리눅스용 프로그램 만든다면, x86 컴파일러를 만들 수 있다. ARM용 프로그램이라면 ARM을 지정하고 컴파일러 소스를 컴파일러(x86에서 실행되는)로 ARM용 크로스 컴파일러를 만들 수 있다. 만약 gcc를 사용하고 싶지 않거나 gcc 컴파일러가 없다면, 특정 CPU 개발 도구는 구입을 해서 사용한다. 그러나 자바는 같은 코드를 사용하여 다른 CPU에서 실행되도록 하기 위해 직접 CPU의 기계어 코드를 생성해서는 안 된다. 그 대신 자바는 바이트코드(Java bytecode)라는 것을 생성한다. 이것을 자바 가상 머신(JVM, Java virtual machine)이 해석을 하여 실행한다. 자바 가상 머신이 인터프리터가 되어 코드 해석 방식의 실행을 함으로써, 같은 바이트코드를 가지고 여러 가지의 CPU에서 실행이 가능해진다. JVM은 CPU와 직접적 관계가 있으므로 이것은 CPU의 기계어 코드로 이루어진다.
> 자바 실행 모델과 자바 바이트코드의 예
자바의 실행 방식은 스택 실행 방식 언어(stack-oriented programming language)를 생각할 수 있다.
int main() { int a = 10; int b = 20; int c; c = a + b; printf("%d", c); // 991 }
이것을 C/C++를 x86 프로세서용 컴파일러로 컴파일하면, 컴파일러와 최적화 등에 따라 다를 수 있지만 다음과 같은 예의 코드가 생성될 수 있다. C 언어에서 실행할 때, 지역변수는 스택이나 CPU의 레지스터를 이용한다. 스택이냐 레지스터냐는 개발 도구의 옵션에서 설정하는 최적화와 함수 내의 변수의 숫자와 관련이 있다. 함수의 블록이 시작되면 레지스터를 스택에 대피시키고, EBP를 스택의 포인터 값으로 설정하여 변수의 베이스 주소로 사용한다. 스택을 이용한다면 다음과 같은 어셈블리 결과를 생각할 수 있다.
mov eax, DWORD PTR 4[ebp] mov edx, DWORD PTR 8[ebp] add eax, edx mov DWORD PTR 12[ebp], eax
이 코드는 2개의 정수형 숫자를 더해 다른 곳에 넣는 과정이다. 메모리에 적체된 코드를 x86이 읽어 실행시킬 수 있는 기계어로 일대일 대응된다. bp 레지스터는 CPU의 스택을 베이스로 한 포인터 레지스터이다. 주로 지역변수로 선언된 경우 스택을 사용한다.
그러나 자바에서 보면:
0 iload_1 1 iload_2 2 iadd 3 istore_3
2개의 숫자를 더하기 위해 스택에 넣고, 다시 스택에서 꺼내서 더한다. 더한 값을 다시 스택에 넣는다.
이 코드는 특정 CPU의 기계어 코드가 아니라, 자바 고유의 기계어로 생각할 수 있는 코드 형태이다. JVM이 읽어 해석한 후, 해당 코드의 기능을 수행한다.
>자바 예제
Hello world
다음은 자바를 사용해 작성한 전통적인 Hello world 프로그램이다.
public class HelloWorldApp { //클래스. 메소드를 넣을 수 있다. public static void main(String[] args) { //메인 메소드의 시작지점이며 public 없이는 작동하지 않는다. System.out.println("Hello World!"); // Hello World를 출력한다. 하지만 Console이라는 구문이 따로있다. } // 메소드의 끝. 다른 메소드가 붙을 수 있다. } // 클래스의 끝. 다른 클래스가 붙을 수 있으나 해당 클래스는 public 이 붙어있지 않아야한다
소스 파일명은 반드시 파일 내의 public class 이름과 동일해야 하며, 파일 확장자는 .java이어야 한다. 예를 들면, 만약 public class 이름이 HelloWorldApp이라면, 파일명은 반드시 HelloWorldApp.java가 되어야 한다. 이 자바 파일이 동작하기 위해서는 자바 컴파일러를 통해서 바이트코드로 컴파일되어 같은 이름의 .class 파일, 즉, HelloWorldApp.class가 생성되어야 한다. 컴파일된 class 파일은 자바 가상 머신을 통해 실행이 가능하다.
리눅스/유닉스 터미널 (혹은 윈도우 cmd)에서 자바 파일을 컴파일한 후 실행하는 방법 예제)
- 컴파일: 자바 컴파일러 사용 (예, javac)
javac HelloWorldApp.java
컴파일 후에는 같은 이름의 class 파일인 HelloWorldApp.class가 생성된다.
- 실행: 자바 가상 머신 사용 (예, java)
java HelloWorldApp
실행 시에는 확장자인 .class를 붙이지 않는다.
- 결과
Hello World!
> 자바 API
> 자바 라이브러리
자바 라이브러리(Java Library)는 Java 언어에 대한 라이브러리이다. org, net, javax, java와 같은 도메인 Import를 추가시켜 준다.
> 자바 파생응용 분야
한편 안드로이드는 자바 VM에 해당하는 달빅계열하에 오픈 자바 클래스를 기반으로 한 API로 프로그래밍을 함으로 이 경우 특수한 경우의 자바 프로그래밍이라고 부를 수 있다.
> 파이썬
패러다임 | 프로그래밍 패러다임: 객체 지향 프로그래밍, 명령형 프로그래밍, 함수형 프로그래밍, 절차적 프로그래밍, 반영 |
---|---|
설계자 | 귀도 반 로섬 |
개발자 | 파이썬 소프트웨어 재단 |
발표일 | 1991년 2월 20일 |
최근 버전 | 3.11[1] |
최근 버전 출시일 | 2022년 10월 24일(11개월 전) |
미리보기 버전 | 3.12.0rc3[2] |
미리보기 버전 출시일 | 2023년 9월 19일(6일 전) |
라이선스 | 파이썬 소프트웨어 재단 라이선스 |
파일 확장자 | .py, .pyc, .pyd, .pyo |
웹사이트 | www |
주요 구현체 | |
C파이썬, IronPython, 자이썬, 마이크로파이썬, 누바, PyPy, 스택이스 파이썬 | |
사이썬, R파이썬 | |
영향을 받은 언어 | |
ABC, 알골 68, C, C++, 딜란, 하스켈, 아이콘, 자바, 리스프, 모듈라-3, 펄 | |
영향을 준 언어 | |
부, 코브라, 커피스크립트, D, F#, 팰컨, 제니, Go, 그루비, 자바스크립트, 줄리아, 님, 루비, 스위프트 |
파이썬(영어: Python)은 1991] 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, ‘인터프리터를 사용하는 객체지향 언어’이자 플랫폼에 독립적인, 동적 타이핑(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python’s Flying Circus〉에서 따온 것이다. 이름에서 고대신화에 나오는 커다란 뱀을 연상하는 경우도 있겠지만 이와는 무관하다. 다만 로고에는 뱀 두마리가 형상화되어 있다. 간결하고 읽기 쉬운 문법이 특징인 프로그래밍 언어로 데이터 분석, 웹 개발, 인공지능 등 다양한 분야에서 활용된다.
파이썬은 비영리의 파이썬 소프트웨어 재단이 관리하는 개방형, 공동체 기반 개발 모델을 가지고 있다.
> 파이썬 개요
파이썬은 초보자부터 전문가까지 사용자층을 보유하고 있다. 동적 타이핑(dynamic typing) 범용 프로그래밍 언어로, 펄 및 루비와 자주 비교된다. 다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍부하여, 대학을 비롯한 여러 교육 기관, 연구 기관 및 산업계에서 이용이 증가하고 있다. 또 파이썬은 순수한 프로그램 언어로서의 기능 외에도 다른 언어로 쓰인 모듈들을 연결하는 접착제 언어로써 자주 이용된다. 실제 파이썬은 많은 상용 응용 프로그램에서 스크립트 언어로 채용되고 있다. 도움말 문서도 정리가 잘 되어 있으며, 유니코드 문자열을 지원해서 다양한 언어의 문자 처리에도 능하다.
파이썬은 기본적으로 해석기(인터프리터) 위에서 실행될 것을 염두에 두고 설계되었다.
- 주요 특징
- 해석 프로그램의 종류
현대의 파이썬은 여전히 인터프리터 언어처럼 동작하나 사용자가 모르는 사이에 스스로 파이썬 소스 코드를 컴파일하여 바이트 코드(Byte code)를 만들어 냄으로써 다음에 수행할 때에는 빠른 속도를 보여 준다.
파이썬에서는 들여쓰기를 사용해서 블록을 구분하는 독특한 문법을 채용하고 있다. 이 문법은 파이썬에 익숙한 사용자나 기존 프로그래밍 언어에서 들여쓰기의 중요성을 높이 평가하는 사용자에게는 잘 받아들여지고 있지만, 다른 언어의 사용자에게서는 프로그래머의 코딩 스타일을 제한한다는 비판도 많다. 이 밖에도 실행 시간에서뿐 아니라 네이티브 이진 파일을 만들어 주는 C/C++ 등의 언어에 비해 수행 속도가 느리다는 단점이 있다. 그러나 사업 분야 등 일반적인 컴퓨터 응용 환경에서는 속도가 그리 중요하지 않고, 빠른 속도를 요하는 프로그램의 경우에도 프로토타이핑한 뒤 빠른 속도가 필요한 부분만 골라서 C 언어 등으로 모듈화할 수 있다(ctypes, SWIG, SIP 등의 래퍼 생성 프로그램들이 많이 있다). 또한 Pyrex, Psyco, NumPy 등을 이용하면 수치를 빠르게 연산할 수 있기 때문에 과학, 공학 분야에서도 많이 이용되고 있다. 점차적인 중요성의 강조로 대한민국에서도 점차 그 활용도가 커지고 있다.
> 파이썬 역사
파이썬은 1980년대 말 고안되어 네덜란드 CWI의 귀도 반 로섬이 1989년 12월 구현하기 시작하였다. 이는 역시 SETL에서 영감을 받은 ABC 언어의 후계로서 예외 처리가 가능하고, 아메바 OS와 연동이 가능하였다. 반 로섬은 파이썬의 주 저자로 계속 중심적 역할을 맡아 파이썬의 방향을 결정하여, 파이썬 공동체로부터 ‘자선 종신 이사’의 칭호를 부여받았다. 이 같은 예로는 리눅스의 리누스 토발즈 등이 있다.
파이썬 2
파이썬3000(혹은 파이썬3k)이라는 코드명을 지닌 파이썬의 3.0버전의 최종판이 긴 테스트를 거쳐 2008년 12월 3일자로 발표되었다. 2.x대 버전의 파이썬과 하위호환성이 없다는 것이 가장 큰 특징이다. 파이썬 3의 주요 기능 다수가 이전 버전과 호환되게 2.6과 2.7 버전에도 반영되기도 하였다.
파이썬 공식 문서에서는 “파이썬 2.x는 레거시(낡은 기술)이고, 파이썬 3.x가 파이썬의 현재와 미래가 될 것”이라고 요약을 했는데, 처음 배우는 프로그래머들은 파이썬 3으로 시작하는 것을 권장하고 있다.[9]
2.x대 버전 과의 차이를 간략히 요약하면 다음과 같다.
- 사전형과 문자열형과 같은 내장자료형의 내부적인 변화 및 일부 구형의 구성 요소 제거.
- 표준 라이브러리 재배치.
- 향상된 유니코드 지원. (2.x에서는 유니코드를 표현하기 위해
u"문자열"
처럼 유니코드 리터럴을 사용했지만 3.0부터는 모든 문자열이 유니코드이기 때문에"문자열"
처럼 표현하면 된다.)[10] - 한글 변수 사용 가능.
print
명령문이print()
함수로 바뀌게 되었다.
파이썬은 다양한 프로그래밍 패러다임을 지원하는 언어이다. 객체 지향 프로그래밍과 구조적 프로그래밍을 완벽하게 지원하며 함수형 프로그래밍, 관점 지향 프로그래밍 등도 주요 기능에서 지원 된다.
파이썬의 핵심 철학은
- “아름다운 게 추한 것보다 낫다.” (Beautiful is better than ugly)
- “명시적인 것이 암시적인 것 보다 낫다.” (Explicit is better than implicit)
- “단순함이 복잡함보다 낫다.” (Simple is better than complex)
- “복잡함이 난해한 것보다 낫다.” (Complex is better than complicated)
- “가독성은 중요하다.” (Readability counts)
와 같이 PEP 20 문서에 잘 정리되어 있다.[11]
파이썬은 언어의 핵심에 모든 기능을 넣는 대신, 사용자가 언제나 필요로 하는 최소한의 기능 만을 사용하면서 확장해나갈 수 있도록 디자인 되었다. 이것은 펄의 TIMTOWTDI(there’s more than one way to do it – ‘문제를 해결하는 방법은 단 한 가지가 아니다’) 철학과는 대조적인 것이며, 파이썬에서는 다른 사용자가 썼더라도 동일한 일을 하는 프로그램은 대체로 모두 비슷한 코드로 수렴한다. 라이브러리는 기본 기능에 없는 많은 기능을 제공한다.
또, 파이썬에서는 프로그램의 문서화가 매우 중시되고 있어 언어의 기본 기능에 포함되어 있다. 파이썬은 원래 교육용으로 설계되었기 때문에 읽기 쉽고, 그래서 효율적인 코드를 되도록 간단하게 쓸 수 있도록 하려는 철학이 구석 구석까지 침투해 있어, 파이썬 커뮤니티에서도 알기 쉬운 코드를 선호하는 경향이 강하다.
> 파이썬 라이브러리
파이썬에는 「건전지 포함(“Battery Included”)」이란 기본 개념이 있어, 프로그래머가 바로 사용할 수 있는 라이브러리와 통합 환경이 이미 배포판과 함께 제공된다. 이로써 파이썬의 표준 라이브러리는 매우 충실하다. 여기에는 정규 표현식을 비롯해 운영 체제의 시스템 호출이나 XML 처리, 직렬화, HTTP ,FTP 등의 각종 통신 프로토콜, 전자 메일이나 CSV 파일의 처리, 데이터베이스 접속, 그래픽 사용자 인터페이스, HTML, 파이썬 코드 구문 분석 도구 등을 포함한다.
서드파티 라이브러리도 풍부하며, 행렬 연산 패키지 넘피(NumPy)이나 이미지 처리를 위한 필로우(Pillow), SDL 래퍼인 파이게임(PyGame), HTML/XML 파싱 라이브러리인 뷰티풀수프(Beautiful Soup) 등은 잘 알려져 있다. 다만, 가장 낮은 수준의 라이브러리까지 포함하면 너무 많아서 감당하기 쉽지 않으므로, 최근 파이썬 패키지 인덱스, 곧 PyPI (Python Packages Index)로 불리는 라이브러리의 저장소(repository)를 관리하는 공식 기구를 새롭게 도입하게 되었다. 2018년 1월 기준으로 파이썬 패키지 인덱스는 125,762 개의 다양한 기능을 가진 패키지를 관리하고 있다.
> 파이썬 문법
파이썬의 문법에서 가장 잘 알려진 특징은 들여쓰기를 이용한 블록 구조를 들 수 있다. 이것은 보통 C 등에서 쓰이는 괄호를 이용한 블록 구조를 대신한 것으로 줄마다 처음 오는 공백으로 눈에 보이는 블록 구조가 논리적인 제어 구조와 일치하게 하는 방식이다. 아래는 C와 파이썬으로 재귀 호출을 사용한 계승을 계산하는 함수를 정의한 것이다.
- 파이썬
def factorial(x): if x == 0: return 1 else: return x * factorial(x - 1)
- 들여쓰기가 잘 된 C
int factorial(int x) { if(x == 0) { return 1; } else { return x * factorial(x - 1); } }
이렇게 비교해 보면 파이썬과 “정리되어 들여쓰기가 된” C 언어와는 차이가 거의 없어 보인다. 그러나 여기서 중요한 것은 위쪽의 C 형식은 가능한 여러 스타일 가운데 하나일 뿐이라는 사실이다.
즉, C로는 똑같은 구문을 다음과 같이 쓸 수도 있다.
- 읽기 어렵게 쓰인 C
int factorial(int x) { if(x == 0) {return 1;} else {return x * factorial(x - 1); } }
파이썬으로는 이렇게 쓰는 것을 허용하지 않는다. 파이썬에서 들여쓰기는 한 가지 스타일이 아니라 필수적인 문법에 속한다. 파이썬의 이러한 엄격한 스타일 제한은 쓰는 사람에 관계 없이 통일성을 유지하게 하며, 그 결과 가독성이 향상될 수 있는 장점이 있지만 다른 한편으로는 프로그램을 쓰는 스타일을 선택할 자유를 제약하는 것이란 의견도 있다.
C와 다르지만 아래와 같이 줄바꿈을 하지 않고 사용할 수도 있다.
다음과 같이 한줄로 작성하여 표현하는 것을 ‘pythonic 하다’라고 말할 수 있다.
def factorial(x): return 1 if x==0 else x * factorial(x - 1)
> 파이썬 자료형
파이썬은 다음과 같은 자료형들을 갖고 있다.
- 기본 자료형:
- 집합형 자료형:
- 리스트형 – 내부의 값을 나중에 바꿀 수 있다.
- 튜플(tuple)형 – 한 번 값을 정하면 내부의 값을 바꿀 수 없다.
- 사전형 – 내부의 값을 나중에 바꿀 수 있다.
- 집합형 – 중복을 허락하지 않는다. 변경 가능하게도, 변경 불가능하게도 만들 수 있다.
또 많은 객체 지향 언어와 같이, 사용자가 새롭게 자신의 형을 정의할 수도 있다.
파이썬은 동적 타이핑의 일종인 덕 타이핑을 사용하는 언어이기 때문에, 변수가 아닌 값이 타입을 가지고 있고, 변수는 모두 값의 참조(C++의 참조)이다.
종류 | 설명 | 문법 예 |
---|---|---|
str |
문자열: 이뮤터블 방식의 일련의 유니코드 코드포인트. | 'Wikipedia' "Wikipedia" """Spanning |
bytearray |
뮤터블(mutable) 방식의 일련의 바이트. | bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105]) |
bytes |
이뮤터블(immutable) 방식의 일련의 바이트. | b'Some ASCII' b"Some ASCII" bytes([119, 105, 107, 105]) |
list |
뮤터블(mutable) 방식의 리스트. 혼합 형태를 포함할 수 있다. | [4.0, 'string', True] |
tuple |
이뮤터블(immutable) 방식. 혼합 형태를 포함할 수 있다. | (4.0, 'string', True) |
set , frozenset |
순서가 정해지지 않은 집합. 중복 허용 안 함. frozenset 은 이뮤터블(immutable)이다. |
{4.0, 'string', True} frozenset([4.0, 'string', True]) |
dict |
뮤터블(mutable) 방식의 연관 배열의 키와 값 쌍. | {key1: value1, key2: value2} |
int |
이뮤터블(immutable) 방식의 정수로서 크기는 무제한. | 42 |
float |
이뮤터블(immutable) 방식의 부동소수점 수 (시스템 정의 정밀도). | 3.14159265358979 |
complex |
이뮤터블(immutable) 방식의 복소수. (실수와 허수) | 3+2.7j |
bool |
이뮤터블(immutable) 방식의 진리값. | True False |
동작하는 플랫폼
첫 파이썬 버전은 매킨토시에서 사용할 목적으로 개발되었지만, 지금은 다양한 플랫폼에서 동작한다. 하지만 안드로이드/iOS에서는 동작하지 않는다.
또한 동작이 되도록 만들 가능성도 적어보인다.
- 마이크로소프트 윈도우(9x/NT 계열은 최신판, 3.1 및 MS-DOS는 옛 버전만)
- 매킨토시(맥 OS 9 이전, 맥 OS X 이후 포함)
- 각종 유닉스
- 리눅스
- 팜 OS
- 노키아 시리즈 60
한글 다루기
원래 파이썬은 미국 지역에서 개발되었기 때문에 한글이나 한자와 같은 2바이트 문자를 지원하지 않았다. 그러나 파이썬 2.0에서 유니코드 문자형을 새로 도입하여 여러 나라의 언어를 다룰 수 있게 되었다. 다른 스크립트 언어와 달리 파이썬에서는 문자의 인코딩과 내부 유니코드 표현을 명확하게 구별한다. 유니코드 문자는 메모리에 저장되는 추상적인 개체이다. 화면에 나타내거나 파일 입출력을 할 때는 변환 코덱의 힘을 빌려서 특정 인코딩으로 변환한다. 또, 소스 코드의 문자 코드를 인식하는 기능이 있어, 다른 문자 코드로 쓰여진 프로그램의 동작이 달라질 위험을 줄여 준다. 파이썬 2.4에서는 한중일 코덱이 표준으로 배포판에 포함되었으므로 이제 한글 처리에 문제는 거의 없다. 예를 들어 윈도우 판의 IDLE에서 한글 입출력을 잘 지원한다.
사용 현황
파이썬은 많은 제품이나 기업 및 연구 기관에서 쓰이고 있다. 대표적인 몇 가지는 다음과 같다.
> 파이썬으로 작성된 자유-오픈 소스 소프트웨어
> 파이썬을 내부적으로 사용하는 소프트웨어
- softimage|xsi (3D 애니메이션 소프트웨어)
- 잉크스케이프(Inkscape)
- 페인트샵 프로(Paint Shop Pro)
- 문명 IV
- 셰이드(Shade)
- TRIBON (3D CAD 소프트웨어)
- 오토데스크 마야 (3D 애니메이션 소프트웨어)
- MotionBuilder (3D 애니메이션 소프트웨어)
- Softimage (3D 애니메이션 소프트웨어)
- Cinema 4D (3D 애니메이션 소프트웨어)
- BodyPaint 3D (3D 애니메이션 소프트웨어)
- Blender 3D (3D 애니메이션 소프트웨어)
- Sidefx Houdini (3D 애니메이션 소프트웨어)
- Abaqus (유한요소해석 소프트웨어)
- TORRENT (공유프로그램)
- Rhino 3D CAD (3D 모델링 소프트웨어)
- 카카오톡 (모바일/PC 메신저)
- MODO 3D (3D 모델링 소프트웨어)