1. 데이터 입출력
데이터 입출력의 개요
- 데이터 입·출력 : 키보드로부터 데이터를 입력받아 화면이나 파일로 출력하는 것
- 이 페이지에서는 C와 Java의 기본적인 프로그램 구조를 이해하고, 다음과 같은 내용이 포함된 프로그램 코드를 읽고 해석하는 방법, 을 배운다.
- 헝가리안 표기법
- 자료형
- C언어의 입출력 함수 : scanf, printf
- Java의 입출력 함수 : Scanner, nextInt, print, printf, println
- 서식 지정자와 제어 문자
- 연산자의 우선순위
헝가리 표기법(Hungarian Notation)
: 변수명 작성시, 변수의 자료형을 알수 ㄹ있도록 자료형을 의미하는 문자를 포함하여 작성하는 방법 EX) int inpua : 정수형 변수 dobuble Result : 실수형 변수
주요 자료형
주요서식 문자열
주요 제어 문자
연산자 우선순위 - 증산시/관비/논삼대
break 와 continue
- break : 반복문이나 switch 문 안에서 break가 나오면 블록을 벗어난다
- continue : 반복문에서 continue가 나오면, continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 옮긴다.
(3) 포인터
- C언어에서는 변수의 주소를 포인터라고 하고, 포인터를 저장할 수 있는 변수를 포인터 변수 라고 한다.
1) 포인터 표기법
char *s
s = "selina";
- s에 지정된 값은 문자열의 시작주소 이다
- s값을 1 증가시킨다는 것은 현재 s가 가리키고 있는 문자의 주소에 다음 문자의 주소로 가리키는 주소를 증가 시킨다는 것이다.
(4) 구조체
-
배열이 자료의 형과 크기가 동일한 변수의 모임이라면, 구조체는 자료의 종류가 다른 변수의 모임이라고 할수 있다.
- 예) 이름, 직위, 급여 등의 필드가 필요한 사원 자료를 하나의 단위로 관리하려면 문자와 숫자가 혼용되는 배열로는 처리할수가 없는데 이런경우, 구조체를 사용하면 간단하게 처리 할 수있다.
1) 구조체 정의
-
구조체를 정의한다는 것은 int 나 char 같은 자료형을 하나 만드는 것을 의미한다.
-
struct : 구조체를 정의하는 예약어
struct sawon{
char name[10];
char jjkwi[10];
int pay;
}
2) 구조체 변수의 선언
- 정수형 변수를 사용하려면 'int a'와 같이 선언한 후 사용하는 것처럼, 구조체 변수를 사용하려면 먼저 정의된 구조체에 대한 변수를 선언 해야 한다.
struct sawon ansan, *seoul
- sawon ansan : 정의한 구조체 sawon 자료형으로 변수를 선언 하는데 변수의 이름은 ansan 이라는 의미이며, 사용자가 임으로 정하면 도니다.
- * seoul: 구조체의 포인터 변수이며, struct sawon seoul' 과 같이 변도로 지정할 수있다.
3) 구조체 멤버의 지정
- 구조체의 멤버는 모든 요소들이 개별적인 이름을 가지고 있으므로 구조체 멤버를 지정할 때는 구조체 변수와 함께 멤버 이름을 지정해야 한다.
ansan.name = "김한국";
ansan.jikwi = "대리";
ansan.pay = 4000000;
- '->'에 의한 지정 : 구조체 포인터 변수를 이용해 구조체 멤버를 지정할 때
seoul -> name = "홍길동";
seoul -> jikwi = "과장";
seoul -> pay = 500000;
- 구조체의 포인터 변수는 일반 포인터 변수 처럼 *를 사용하여 멤버를 지정할 수도 있다.
(*seoul).name = "홍길동";
(*seoul).jikwi = "과장";
(*seoul).pay = 500000;
간단해설 ->
p = {"데이터1",95,88}
p+1 = {"데이터2",84,91}
p+2 = {"데이터3",86,75}
(p+1)hab = (p+1)->os + (p+2)->db
(p+1)hab = 84 + 75
=159
(p+1)hhab = (p+1)->hab + p->os + p->db
(p+1)hhab = 159 + 95 + 88
= 342
(p+1)->hab + (p+1)->hhab =
159 + 342 = 501
답: 501
(5) 사용자 정의 함수
- 사용자가 직접 만들어 사용하는 함수
함수포인터
- C언어에서 함수 이름은 해당 함수가 시작되는 주소를 의미한다.
- 변수의 주소를 포인터 변수에 저장하는 것처럼, 함수의 주소도 함수 포인터에 저장할 수 있을 뿐만 아니라 함수 포인터를 이용하여 함수를 호출할 수도 있다.
- 함수 포인터를 선언하는 방법은 함수를 선언하는 것과 동일한데, 포인터 변수임을 의미하는 *를 붙여주고 우선순위를 구분하기 위해 함수 포인터 이름과 함께 괄호로 묶어주는 것만 다르다.
(6) Java의 클래스
- 클래스는 객체 생성을 위한 필드(속성)와 메서드(함수)를 정의하는 설계도로, java는 아무리작은 프로그램이라도 클래스를 만들어서 사용해야 한다.
생성자(Constructor)
- 객체 변수 생성에 사용되는 메서드
- 객체 변수를 생성하면서 초기화를 수행한다
- 클래스 안에 생성자를 정의하는 문장이 있다면 문장에 적힌 대로 객체 변수를 초기화 하면서 생성하지만, 없으면 그냥 객체 변수만 생성하고 제어가 다음 줄로 넘어간다.
객체 변수의 선언
- 객체 변수를 선언한다는 것은 클래스를 사용하기 위해 객체 변수를 생성하고, 생선된 객체가 있는 곳에 주소를 객체 변수에 저장 하는 것이다.
- 기본형식
클래스명 객체변수명 = new 생성자()
super, this
- super : 상속한 부모클래스를 가리키는 예약어
- this : 현재 실행중인 메소드가 속한 클래스를 가리키는 예약어
(7)Java의 활용
추상클래스와 형 변환
※abstract class Animal{
- abstract[클래스 정의부] : abstract는 추상클래스를 정의하는 명령어로, 추상 클래스 정의 시 꼭 써야 하는 예약어이다.
- 추상 클래스는 내부에 실행 코드가 없는 추상 메서드를 포함하기 때문에, 객체 변수의 생성자로 사용할 수 없다.
Animal a = new Animal();
추상클래스(Abstract Class)
- 추상 메서드를 하나 이상 포함 하는 클래스
- 추상 클래스는 내부에 실행 코드가 없는 추상 메서드를 포함 하기 때문에, 객체 변수의 생성자로 사용할 수 없다.
- 추상 메서드는 선언만 있고 내부에 실행 코드가 없는 메서드로, 이후 상속 관계가 설정된 자식 클래스에서 재정의 후 사용한다.
추상 메서드의 재정의
- 추상 메서드는 부모 클래스가 자식 클래스에게 주는 의무와 같다.
- 부모 클래스와 상속 관계에 있다면 반드시 부모 클래스의 추상 메서드를 재정의 해야 한다.
형 변환(Casting)
- 부모 클래스의 구조를 가지면서 자식클래스의 속성이나 메서드로 재정의하고 싶을 때 사용하는 기법
- 만약 부모 클래스의 구조를 가져야 할 이유가 없다면, 부모클래스를 상속받아 재정의하고 있는 자식 클래스의 구조로 객체변수를 만들어 사용하면 된다
- 예) Chicken a = new Chicken();
(8)Python의 활용
- 객체 지향 기능을 지원하는 스크립트언어
- C, Java와 비교했을 때, 기본 작성법의 차이점
- 변수의 자료형에 대한 선언이 없다
- 문자와 문자열을 작은 따옴표(''), 큰따옴표("") 로 구분 없이 사용할수 있으며, 3개의 작은 따옴표(''' '''), 3개의 큰따옴표(""" """)로도 묶어 표현할수 있다
- 세미콜론(;) 사용할 필요 없다
- if for 코드블록의 중괄호({}) 대신 콜론(:) 이나 여백으로 구분한다.
함수
- 표준 입력함수
- 키보드로 부터 입력 받아 변수에 저장 하는 함수
- 문자열 취급
- 형식
변수 = input( 출력함수)
print() 함수
print(출력값1, 출력값2, ..., sep = 분리문자, end = 종료문자)
- sep
- 여러값 출력할때 사이 구분하는 문자 , 등등
- 기본값 : 공백 한칸 (' ')
- end
- 맨 마지막에 표시할 문자
- 기본값은 줄나눔 ('\n')
for in 반복문
for item in iterable:
... 반복할 구문...
var_list = [1, 3, 5, 7]
for i in var_list:
print(i)
1
3
5
7
세트(set)
- 집합(set)같은 python의 자료형으로, 중괄호({})를 이용하여 리스트와 같이 다양한요소를 저장 한다
- 순서가 정해져 있지 않으며, 중복 X
s2 = set("Hello")
s2
{'e', 'H', 'l', 'o'}
add()
s1 = set([1, 2, 3])
s1.add(4)
s1
{1, 2, 3, 4}
update()
s1 = set([1, 2, 3])
s1.update([4, 5, 6])
s1
{1, 2, 3, 4, 5, 6}
remove()
s1 = set([1, 2, 3])
s1.remove(2)
s1
{1, 3}
- 연속된 숫자를 생성, 리스트나 반복문에 사용
- 최종값의 -1까지 생성, 최종값이 음수일 경우 -1이 끝수 -2는 끝에서 두번째
- 형식
range(최종값)
a = range(7)
print (list(a))
[0,1,2,3,4,5,6]
range(초기값, 최종값)
a = range(2, 7)
print (list(a))
[2,3,4,5,6]
range(초기값, 최종값, 증가값)
a = range(1, 7, 2)
print (list(a))
[1, 3, 5]
for i in range(7):
print(i)
0
1
2
3
4
5
6
for i in range(2, 7):
print(i)
2
3
4
5
6
for i in range(1, 7 ,2):
print(i)
1
3
5
- 문자열, 리스트와 같은 순차형 객체를 잘라서 반환하는 기능
- 형식
객체명[초기위치 : 최종위치]
items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
items[2:5]
items[5:]
items[:3]
items[:]
객체명[초기위치:최종위치:증가값]
items[2:9:3]
items[:10:2]
items[2::2]
items[::3]
리스트 관련 주요 메서드
리스트의 복사
- copy()메서드를 사용 안하고 '새로운리스트 = 기존의 리스트' 형식으로 복사를 하면, 같은 메모리를 공유 하기 때문에 한쪽이 수정되면 다른 한쪽도 그대로 반영 된다.
- copy() 메서드를 사용하면 별개의 자료공간에 저장 된다
세트관련 주요 메서드
세트의 pop() 메서드
- 세트의 pop() 메서드는 리스트와 달리 인수를 입력하지 못하며, pop() 사용시 어떤 요소가 출력되고 삭제될 지는 알 수 없다.
(9)절차적 프로그래밍 용어
- 일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 언어
- 프로그램이 실행되는 절차를 중요시 한다.
- 데이터를 중심으로 프로시저를 구현하며, 프로그램 전체가 유기적으로 연결되어있다.
- 자연어에 가까운 단어와 문장으로 구성
절차적 프로그래밍 언어의 종류
(10)객체 지향 프로그래밍 언어
객체지향 프로그래밍 언어의 종류
- 현실세계의 개체를 기계의 부품처럼 하나의 객체로 만들어, 객체들을 조립해서 프로그램을 작성하는 기법
- 프로시저보다는 명령과 데이터로 구성된 객체를 중심으로 하는 프로그래밍
(11)스크립트 언어
- HTML문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 언어
- 기계어로 컴파일 되지않고, 번역기가 소스를 분석하여 동작한다
- 게시판, 상품검색 회원가입 등 데이터베이스 처리 작업을 수행하기 위해 주로 사용한다.
- 언어의 분류
스크립트 언어의 종류
(12)선언형 언어
선언형 언어
- 프로그램이 수행해야 할 문제를 기술하는 언어
- 목표를 명시하고, 알고리즘은 명시하지 않는다
- 선언형 언어의 분류
명령형 언어
- 문제를 해결하기 위한 방법을 기술 한 언어
- 순차적인 명령 수행을 기본으로 한다
- 폰노이만 구조에 개념적인 기초를 두고 있다
- 명령형 언어에는 절차적 언어와 객체 지향 언어가 있다.
- 종류 : FORTRAN,COBOL,C,JAVA 등
선언형 언어의 종류
(13)라이브러리
라이브러리
- 프로그램 효율적인 개발을 할 수 있도록 자주 사용하는 함수나 데이터들을 미리 만들어 놓은 집합체
- 라이브러리 분류
C언어의 대표적인 표준 라이브러리
- C언어는 라이브러리를 헤더파일로 제공한다
- C언어에서 헤더파일을 사용하려면 #include <stdio.h> 와 같은 include 문을 이용해 선언후 사용해야 한다
Java의 대표적인 표준 라이브러리
- Java는 라이브러리를 패키지에 포함하여 제공 한다.
- Java에서 패키지를 사용하려면 'import java.util'과 같이 import문을 이용해 선언한 후 사용해야 한다.
- import로 선언된 패키지 안에 있는 클래스의 메서드를 사용할때는 클래스와 메서드를 마침표(.)로 구분하여 'Math.abs()'와 같이 사용한다.
Python의 대표적인 표준 라이브러리
- Python 에서 라이브러리를 사용하려면 'import random'과 같이 선언하고, 사용할 때는 마침표(.)로 구분하여 'random.choice()'와 같이 사용한다.
(14)예외처리
예외처리 (Exception Handing)
- 예외가 발생했을 때 프로그래머가 해당 문제에 대비해 작성해 놓은 처리 루틴이 수행 되도록 한것
- 예외발생시 일반적으로 프로그램 종료하거나 로그를 남긴다
- c++, Ada Java Javascript 같은 언어는 예외처리가 내장 되어있다
- 조건문을 이용해 예외처리 루틴을 작성한다
- 대표적인 예외의 원인
- 컴퓨터 하드웨어 문제
- 운영체제의 설정 실수
- 라이브러리 손상
- 사용자의 입력 실수
- 받아들일 수 없는 연산
- 할당하지 못하는 기억 장치 접근
Java의 예외 처리
구조체 메모리 사이즈 sizeof()
typeof struct student{
char a; // 1비트
int b; // 4비트
}
- 실제로는 8비트가 저장됨
typeof struct student{
char a; // 1비트
char b; // 1비트
int c; // 4비트
}
- 1비트씩 char이 저장되고 int 4비트 저장됨 총 8비트
typeof struct student{
char a; // 1비트
int c; // 4비트
char b; // 1비트
}
- 12비트 저장됨
typeof struct student{
char a; // 1비트
doble b; // 8비트
}
- 16비트 저장됨
typeof struct student{
char a; // 1비트
int c; // 4비트
doble b; // 8비트
}
- 4+4+8 = 16비트 저장됨