데이터 타입
C / C++
- 문자
- char ( 1Byte )
- 부호없는 문자형
- unsigned char ( 1Byte )
- 정수
- short ( 2Byte )
- int ( 4Byte )
- long ( 4Byte )
- long long ( 8Byte )
- 부호없는 정수형
- unsigned short ( 2Byte )
- unsigned int ( 4Byte )
- unsigned long ( 4Byte )
- 실수
- float ( 4Byte )
- double ( 8Byte )
- long double ( 8Byte )
Java
- 문자
- char ( 2Byte )
- 정수
- byte ( 1Byte )
- short ( 2Byte )
- int ( 4Byte )
- long ( 8Byte )
- 실수
- float ( 4Byte )
- double ( 8Byte )
- 논리
- boolean ( 1Byte )
Python
- 문자
- str ( 무제한 )
- 정수
- int ( 무제한 )
- 실수
- float ( 8Byte )
- complex ( 16Byte )
변수
변수란? 컴퓨터가 명령을 처리하는 도중 발생하는 값을 저장하기 위한 공간
변수명 작성 규칙을 예시와 함께 알아보도록 하자
- 2abc (X)
- 변수명 앞은 언더 바(_) 혹은 영문자만 사용 가능
- veryverylonglong (O)
- 변수명의 글자 수 제한은 없음
- my parameter (X)
- 변수명 사이에 공백 추가 불가능
- my-parameter (X)
- 변수명 사이 언더바를 제외한 특수문자 사용 불가능
- for (X)
- 예약어 사용 불가능
- parameter / Parameter
- 대, 소문자 구분함
기억 클래스
- 자동 변수
- 기억영역 : 메모리(스택)
- 예약어 : auto
- 생존기간 : 일시적
- 사용 범위 : 지역적
- 레지스터 변수
- 기억영역 : 레지스터
- 예약어 : register
- 생존기간 : 일시적
- 사용 범위 : 지역적
- 정적 변수(내부)
- 기억영역 : 메모리(데이터)
- 예약어 : static
- 생존기간 : 일시적
- 사용 범위 : 지역적
- 정적 변수 (외부)
- 기억영역 : 메모리(데이터)
- 예약어 : static
- 생존기간 : 영구적
- 사용 범위 : 전역적
- 외부 변수
- 기억영역 : 메모리(데이터)
- 예약어 : extern
- 생존기간 : 일시적
- 사용 범위 : 전역적
데이터 입*출력
서식 문자열
- %d : 정수형 10진수
- %u : 부호없는 정수형 10진수
- %o : 정수형 8진수
- %x : 정수형 16진수
- %c : 문자
- %s : 문자열
- %f : 소수점 포함하는 실수
- %e : 지수형 실수
- %ld : long형 10진수
- %lo : long형 8진수
- %lx : long형 16진수
- %p : 주소
입*출력
- C언어
- 입력
- scanf(서식 문자열, 변수 주소)
- getchar()
- gets()
- 출력
- printf(서식 문자열, 변수)
- putchar()
- puts()
- 입력
- Java
- 입력
- Scanner scan_obj = new Scanner(System.in);
- 변수명 = scan_obj.nextInt();
- 출력 : System.out.print(서식 문자열, 변수)
- 입력
출력 예시
- % : 서식 문자 지정
- - : 왼쪽부터 출력 (없을 시 오른쪽부터 출력)
- 8 : 출력 자릿수 8자리로 지정
- 2 : 소수점 이하 2자리 지정
- f : 실수 출력
주요 제어 문자
- \n : 커서를 다음 줄 앞으로 이동
- \b : 커서를 왼쪽으로 한 칸 이동
- \t : 커서를 일정 간격 띄움
- \r : 커서를 혀재 줄 처음으로 이동
- \0 : 널 문자 출력
- \' : 작은따옴표 출력
- \" : 큰따옴표 출력
- \a : 스피커로 벨 소리 출력
- \\ : 역 슬래시 출력
- \f : 한 페이지 넘기기
연산자
우선순위순으로
- 단항 연산자
- ! ~ ++ -- sizeof
- 이항 연산자
- 산술 연산자
- * / %
- + -
- 시프트 연산자
- << >>
- 관계 연산자
- < <= >= >
- == !=
- 비트 연산자
- &
- ^
- |
- 논리 연산자
- &&
- ||
- 산술 연산자
- 상향 연산자
- 조건 연산자
- ? :
- 조건 연산자
- 대입 연산자
- = += -= *= /= %= <<= >>= 등...
- 순서 연산자
- ,
비트 연산자
양수일 때는 패딩 비트가 모두 0으로 채워지나
음수일 경우
왼쪽으로 패딩비트가 채워지면 오른쪽의 빈 자리에 0이 채워지고,
오른쪽으로 패딩비트가 채워지면 왼쪽의 빈 자리에 1이 채워진다.
2의 보수는 1의 보수에 1 더한 것
제어문
if문
switch문
goto문
반복문
for문
증가값같은 경우는 무조건 최종값에 대한 조건이 충족하고 그 이후 조건식이 실행된 후에 증가값만큼 증가한다.
따라서 아무리 단항연산자(++, -- 같은)의 순서가 달라도 결과는 같다.
while문
do~while문
do{
조건이 참일 시 실행 문장;
}while(조건);
break, continue
break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어남.
continue
- continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮긴다.
- 반복문에서만 사용
배열과 문자열
1차원 배열
C언어
Java
public class Example {
public static void main(String[] args){
int a[] = new int[5];
int i;
for(i=0;i<5;i++)
a[i]=i+10;
for (i=0;i<5;i++)
System.out.printf("%d ", a[i]);
}
}
/*10 11 12 13 14*/
배열 초기화
char a[3] = {'A','B','C'}
int a[2][4] = {{1,2,3,4},{5,6,7,8}}
int a[3] = {3, } => 나머지 요소엔 0이 입력됨.
포인터
포인터란? 변수의 주소.
포인터의 용도
- 연결된 자료 구조 구성
- 동적으로 할당된 자료 구조 지정
- 배열을 인수로 전달
- 문자열을 표현
- 커다란 배열에서 요소를 효율적으로 저장
- 메모리에 직접 접근
사용자 정의 함수
Java의 클래스와 메소드
클래스 : 객체 생성을 위한 속성과 함수를 정의하는 설계도
class Human{
String name;
boolean sex;
int age;
}
public class Ex{
public static void main(String[] args)}
Human human = new Human(); //객체 생성
human.name = 'Cheolsu';
human.sex = True;
human.age = 17;
}
}
Python의 기초
# 기본 문법
# 변수 자료형 선언 안 해도 됨. 세미콜론 안 적어도 됨.
# 변수 연속 선언 가능
a = 1
b, c = 2, 3
# if나 for와 같이 코드 블록을 포함하는 명령문을 사용할 땐 indent(들여쓰기)를 맞춰줘야 함.
# 기본 indent는 4칸.
if b > a:
print("b가 a보다 큼")
strA = input('입력하세요') # 화면에 '입력하세요'란 문구 출력. 입력값 받을 때까지 커서 깜박임.
strB, strC = input().split(',') # 'hello,world'를 입력했으면 분리 문자 ','에 의해 strB에는 hello가, strC에는 world가 저장됨.
print(strB, strC, sep='/', end='.') # hello/world.
print('%-8.2f' % 200.20) # 200.20** (*은 공백) # 서식 문자열을 출력할 때 나타내는 표현
# % : 서식 문자임을 지정
# - : 왼쪽부터 출력
# 8 : 출력 자릿수를 8자리로 지정
# 2 : 소수점 이하를 2자리로 지정
# f : 실수로 지정
# python 문자열
print('abc'.upper()) # 'ABC' # 다 대문자로
print('ABC'.lower()) # 'abc' # 다 소문자로
print('ABC EFG'.capitalize()) # 'Abc efg' # 맨 첫 글자만 대문자. 나머진 소문자
print('ABC EFG'.title()) # 'Abc Efg' # 단어 첫 글자는 대문자. 나머진 소문자
print('abc'.replace('a','d')) # 'dbc' # 글자 대체
print('ABC-EFG'.split('-')) # ['ABC,'EFG'] # 분리 단어에 따라서 분리
print('abbbcd'.count('b')) # 3 # 글자 갯수 반환
print('abcd'.find('b')) # 1 # 값 위치 반환 # 찾지 못할 경우 -1 반환
print('abcd'.index('b')) # 1 # 값 위치 반환 # 찾지 못할 경우 오류 반환
lst = [0, 1, 2] # 1차원 리스트
llst = [[0, 1], [2, 3]] # 2차원 리스트
# 리스트 관련 주요 메소드
lst.append(4) # lst = [0, 1, 2, 4]
lst.insert(3, 3) # lst = [0, 1, 2, 3, 4] # 3번째 위치에 3을 추가
lst.insert(2, 5) # lst = [0, 1, 5, 2, 3, 4] # 2번째 위치에 5 추가
del lst[2] # lst = [0, 1, 2, 3, 4] # 2번째 요소 5 삭제
lst.remove(4) # lst = [0, 1, 2, 3] # lst에서 '4' 요소 찾아 삭제
lst.pop(1) # 3 # lst = [0, 2, 3] # 해당 위치에 있는 값 출력하고 해당 요소 삭제
lst.index(0) # 0 # 저장된 요소 위치 반환
[1, 0, 1, 0, 0].count(0) # 3 # 0 요소 개수 반환
[1, 2].extend([3, 4]) # [1, 2, 3, 4] # 리스트 끝에 새로운 리스트 추가하여 확장
[1, 2, 3].reverse() # [3, 2, 1] # 리스트 순서 역순으로 뒤집음
[2, 1, 3].sort() # [1, 2, 3] # 오름차순 정렬
[2, 1, 3].sort(reverse=True) # [3, 2, 1] # 내림차순 정렬
a = [1, 2, 3]
b = a.copy() # 리스트 복사 # 요소 값만 복사되어 서로 독립적인 메모리 공간 차지
for i in range(0, 10, 2): # 0에서 10-1까지 2만큼 증가하며 숫자 생성
print(i, end=' ') # 0, 2, 4, 6, 8
a = [1, 2, 3, 4, 5]
print(a[:3]) # 1, 2, 3 # 3-1까지의 요소 반환
print(a[0:4:2]) # 1, 3
라이브러리
라이브러리 : 자주 사용하는 함수나 데이터들을 미리 만들어 모아 놓은 집합체
C언어 대표 표준 라이브러리
- stdio.h : 데이터 입 * 출력에 사용되는 기능 제공
- math.h : 수학 함수 제공
- string.h : 문자열 처리에 사용되는 기능 제공
- stdlib.h : 자료형 변환, 난수 발생, 메모리 할당에 사용되는 기능 제공
- time.h : 시간 처리에 사용되는 기능 제공
Java 대표 표준 라이브러리
- java.lang : 자바에 기본적으로 필요한 인터페이스, 자료형, 예외 처리 등에 관련된 기능 제공. import문 없이 사용 가능
- java.util : 날짜 처리, 난수 발생, 복잡한 문자열 처리 등과 관련 기능 제공
- java.io : 파일 입*출력과 관련된 기능 및 프로토콜 제공
- java.net : 네트워크와 관련된 기능 제공
- java.awt : 사용자 인터페이스(UI)와 관련된 기능 제공
Python 대표 표준 라이브러리
- 내장 함수 : import문이나 클래스명 없이 사용가능한 기본 인터페이스
- os : 운영체제와 상호 작용하기 위한 기능 제공
- re : 고급 문자열 처리 위한 기능 제공
- math : 복잡한 수학 연산을 위한 기능 제공
- random : 무작위 선택을 위한 기능 제공
- statistics : 통계값 산출을 위한 기능 제공
- datetime : 날짜와 시간 조작을 위한 기능 제공
절차적 프로그래밍 언어
일련의 처리 절차를 정해진 문법에 따라 순차적으로 기술해 나가는 언어
장점 : 빠른 실행 속도, 같은 코드를 복사하지 않고 다른 위치에서 호출해 사용가능, 모듈 구성 용이, 구조적 프로그래밍 가능
단점 : 여러운 프로그램 분석, 어려운 유지 보수 및 코드 수정
종류
- C
- 데니스 리치에 의해 개발됨
- 자료 주소 조작 가능한 포인터 제공
- 고급 + 저급 프로그램 언어 특징
- 컴파일러 방식
- 이식성이 좋아 기종 관계없이 프로그램 작성 가능
- ALGOL
- 수치 계산이나 논리 연산을 위한 과학 기술 계산용 언어
- COBOL
- 사무 처리용 언어
- FORTRAN
- 과학 기술 계산용 언어
객체 지향 프로그래밍 언어
객체 지향 프로그래밍 언어는 객체들을 조립해 프로그램을 작성할 수 있도록 한 프로그래밍 기법.
장점
- 상속을 통한 재사용과 시스템 확장 용이
- 코드 재활용성이 높음
- 자연적 모델링에 의해 분석과 설계를 쉽고 효율적으로 할 수 있음
- 사용자와 개발자 사이의 이해를 쉽게 해줌
- 대형 프로그램 작성 용이
- 소프트웨어 개발 및 유지보수가 용이
단점
- 정형화된 분석 및 설계 방법이 없음
- 구현 시 처리 시간 지연
종류
- Java
- 분산 네트워크 환경에 적용 가능. 멀티스레드 기능을 제공해 여러 작업을 동시에 처리 가능
- 운영체제 및 하드웨어에 독립적이며 이식성이 강함
- 캡슐화가 가능하고 재사용성이 높음
- C++
- C언어에 객체지향 개념을 적용한 언어.
- 모든 문제를 객체로 모델링해 표현
- Smalltalk
- 최초로 GUI를 제공한 언어
구성 요소
- 객체 : 데이터 + 메소드를 결합시킨 실체
- 데이터 : 객체들이 갖고 있는 데이터 값들을 단위별로 정의하는 것
- 메소드 : 객체가 메세지를 받아 실행해야 할 때 구체적 연산을 정의하는 것
- 클래스 : 두 개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소. 즉, 공통된 특성과 행위를 갖는 객체의 집합
- 메시지 : 객체들 간 상호작용 하는데 사용되는 수단
특징
- 캡슐화 : 데이터와 데이터를 처리하는 함수를 하나로 묶는 것
- 정보 은닉 : 다른 객체에 자신의 정보를 숨기고 자신의 연산만을 통해 접근을 허용하는 것
- 추상화 : 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 모델화하는 것
- 상속성 : 이미 정의된 부모 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것.
- 다형성 : 하나의 메세지에 대해 각 클래스가 갖고 있는 고유한 방법으로 응답할 수 있는 능력
스크립트 언어
HTML 문서 안에 직접 프로그래밍 언어를 삽입해 사용하는 것.
기계어로 컴파일 되지 않고 별도의 번역기가 소스를 분석해 동작하게 하는 언어.
장점
- 컴파일 없이 바로 실행해 결과를 바로 확인 가능
- 배우고 코딩하기 쉬움
- 개발 시간이 짧음
- 소스 코드를 쉽고 빠르게 수정할 수 있음
단점
- 코드를 읽고 해석해야 해 실행 속도가 느림
- 런타임 오류가 많이 발생
종류
- 자바 스크립트
- 클라이언트용 스크립트 언어
- 웹 페이지 동작 제어, 변수 선언 필요 없음.
- ASP
- 서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어
- JSP
- Java로 만들어진 서버용 스크립트 언어.
- PHP
- 서버용 스크립트 언어.
- C, Java 등과 문법이 유사해 배우기 쉬워 웹 페이지 제작에 많이 사용
- 파이썬
- 객체지향 기능을 지원하는 대화형 인터프리터 언어. 플랫폼에 독립적이고 문법이 간단함.
선언형 언어
프로그램이 수행해야 할 문제를 기술하는 언어. 목표를 명시하고 알고리즘은 명시하지 않는다.
함수형 언어
- 수학적 함수를 조합해 문제를 해결하는 언어. 재귀 호출이 자주 이용됨. 병렬 처리에 유리.
- LISP
논리형 언어
- 기호 논리학에 기반을 둔 언어. 반복문이나 선택문을 사용하지 않는 비절차적 언어
- PROLOG
장점 : 가독성이나 재사용성이 좋음, 작동 순서를 구체적으로 작성하지 않아 오류가 적음, 프로그램 동작을 변경하지 않고도 관련 값 대체 가능
종류
- HTML
- 인터넷 표준 문서인 하이퍼텍스트 문서를 만들기 위해 사용하는 언어
- LISP
- 인공지능 분야에 사용되는 언어.
- 기본 자료 구조가 연결 리스트 구조. 재귀 호출 많이 사용
- PROLOG
- 논리학을 기초로 한 고급 언어. 인공 지능 분야에서 논리적 추론이나 리스트 처리 등에 주로 사용
- XML
- 기존 HTML의 단점을 보완해 웹에서 구조화된 폭넓고 다양한 문서들을 상호 교환할 수 있도록 설계된 언어.
- Haskell
- 함수형 프로그래밍 언어. 부작용이 없음. 코드가 간결하고 에러 발생 가능성이 낮음.
예외 처리
예외 : 프로그램의 정상적 실행을 방해하는 조건이나 상태
이러한 예외가 발생했을 때 프로그래머가 해당 문제에 대비해 작성해 놓은 처리 루틴을 수행하도록 하는 것.
java 예외 객체
- ClassNotFoundException : 클래스를 찾지 못한 경우
- NoSuchMethodException : 메소드를 찾지 못한 경우
- FileNotFoundException : 파일을 찾지 못한 경우
- InterruptedIOException : 입*출력 처리가 중단된 경우
- ArithmeticException : 0으로 나누는 등 산술 연산에 대한 예외가 발생한 경우
- IllegalArgumentException : 잘못된 인자를 전달한 경우
- NumberFormatException : 문자열을 숫자 형식으로 변환한 경우
- ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 접근을 시도한 경우
- NegativeArraySizeException : 0보다 작은 값으로 배열 크기를 지정한 경우
- NullPointerException : 존재하지 않은 객체를 참조한 경우
'그 외 공부 > 정처기-실기(완)' 카테고리의 다른 글
6장 화면 설계 (0) | 2021.07.02 |
---|---|
5장 서버 프로그램 구현 (0) | 2021.06.29 |
4장 통합 구현 (0) | 2021.06.27 |
3장 데이터 입*출력 구현 (0) | 2021.06.27 |
2장 요구사항 확인 (0) | 2021.06.26 |