s149 데이터 입출력 ~s161 라이브러리 본문
▶ c 입출력 함수 : scanf, printf
java 입출력함수 : Scanner, nextInt, print, printf, println
▶ c언어
함수들을 모아놓은 헤더파일 제공
⦁ stdio.h : 표준 입출력과 관련된 함수를 정의해놓은 헤더파일
⦁ 모든 c 프로그램은 main()가 포함되어야 실행가능
⦁ 자료형 : int, long, short, float 등
⦁ 반드시 ;(세미콜론)으로 문장을 끝내야 함.
- 줄 수 상관없이 ;이 나올때 까지를 한 문장으로 인식하고 컴파일 함
⦁ scanf()는 데이터를 입력받을 때 주소를 사용, 때문에 " ", 뒤쪽은 &(주소 연산자)를 붙임
⦁ printf() : 화면에 출력
⦁ fprintf(): 파일에 출력
▶ 자바
⦁ import java.util.Scanner; -> import 패키지.패키지.클래스;
⦁ 클래스 이름 : 첫글자를 대문자
⦁ 메소드들을 모아놓은 클래스 -> 클래스를 모아놓은 패키지
⦁ 자바는 클래스 안에 속성(변수)과 메소드(함수)를 만들어서 실행
⦁ public class : 실행을 위한 클래스에 그대로 꼭 써야하는 예약어
⦁ Scanner : 클래스 이름
scanner : 객체변수 명
new : 객체 생성 예약어
Scanner() : 생성자
System.in : 표준 입력장치, 즉 키보드를 의미.
▶ 헝가리안 표기법(Hungarian Notation) : 변수명 작성 시 변수의 자료형을 알 수 있도록 자료형을 의미하는 문자를 포함하여 작성하는 방법. ex) int i_inputA, double d_Result
▶ 포인터
- 변수의 주소를 포인터 라고 하고, 포인터를 저장할 수 있는 변수를 포인터변수 라고 한다.
int *b = &a // a의 주소값을 포인터변수 b가 가리키도록 한다.
*b = *b + 20; // b가 가리키고있는곳의 값에 20을 더한다
문제
include <stdio.h>
main() {
char *p = "KOREA"; // 문자열을 저장하는 경우, 끝을 의미하는 널문자(\0)가 저장되지만 출력되지 않는다.
printf("%s\n", p); // p -> 주소라고 생각하자(*가 없을때)
printf("%s\n", p+3); // p+3의 위치부터 문자열 출력! %s이니까
printf("%c\n", *p); // *는 주소의 값을 가져온다 생각하자.
printf("%c\n", *(p+3)); // p+3의 위치의 값을 가져온다 생각하자
printf("%c\n", *p+2); // *p이므로 주소의 '값'이므로 값인 K의 다다음 문자인 M을 뜻한다
/*
정답
KOREA
EA
K
E
M
*/
}
s153
▶ JAVA의 클래스
⦁ 클래스 : 객체 생성을 위한 필드(속성)와 메소드(함수)를 정의하는 설계도
- 객체를 생성할 때 사용하는 연산자 new
⦁ ClassA cal = new ClassA();
클래스 객체변수 = 객체생성예약어 생성자;
⦁ 생성자 : 객체 변수 생성에 사용되는 메소드, 객체변수를 생성하면서 초기화를 수행한다.
클래스와 동일한 이름의 메소드를 생성자라고 하는데, 해당 클래스의 객체변수 생성 시 자동으로 실행이 된다
⦁ 상속
- 오버라이딩(메소드 재정의) : 상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의하여 사용
- 오버라이딩 할 경우, 부모와 자식 클래스 간에 똑같은 함수ex)void prn()이 메인에서 호출되었을 경우 자식클래스에서 재정의한 함수를 사용한다!!
- 오버로딩 : 같은 이름의 메서드를 여러개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
- super : 상속한 부모 클래스를 가리키는 예약어
- this : 현재 실행중인 메소드가 속한 클래스를 가리키는 예약어
문제
import java.util.Scanner;
public class Test {
public static void main(String args[]) {
int i;
Scanner s = new Scanner(System.in);
System.out.print("숫자를 입력하시오: ");
i = s.nextInt();
recursive(i);
s.close();
}
static int recursive(int n) {
int i;
if (n<1)
return 2;
else {
i = (2 * recursive(n-1)) + 1;
System.out.println(i); // i값 출력 후
return i; // i값 반환!
}
}
}
간략 풀이 :
n=5, (2*r(4))+1, 95 -> 9)출력 10)반환
n=4, (2*r(3))+1, 47 -> 7)출력 8)반환(i에 47담겨 r(4)로반환)
n=3, (2*r(2))+1, 23 -> 5)출력 6)반환(i에 23담겨 r(3)로반환)
n=2, (2*r(1))+1, 11 -> 3)출력 4)반환(i에 11담겨 r(2)로반환)
n=1, (2*r(0))+1, 5 -> 1)출력 2)반환(i에 5담겨 r(1)로반환)
n=0, 2
그렇기 때문에 정답은
5
11
23
47
95
▶ JAVA의 활용
⦁ 추상 메소드 : 자식 클래스에서 재정의해야만 사용할 수 있는 메소드,
⦁ 추상 클래스 : 추상 메소드를 하나 이상 포함하는 클래스 ( new로 객체생성이 불가능하다, 자식클래스에서 상속으로 추상메소드를 재정의해야 객체변수의 생성이 가능하다)
⦁ 클래스의 형 변환 : 부모 클래스의 객체 변수를 선언할 때 자식 클래스의 생성자를 이용하는 것
- 부모클래스의 구조를 가지면서 자식클래스의 속성이나 메소드로 재정의하고 싶을 때 사용하는 기법이다.
- 만약 부모 클래스의 구조를 가질 이유가 없다면, 그냥 부모클래스를 상속하고 있는 자식클래스의 구조로 객체변수를 만들어 사용하면 됨. ex) Chicken a = new Chicken(),
- 형변환 ex) Animal a = new Chicken();
- [부모클래스 명] [객체변수 명] = new [자식클래스 생성자()];
- 이렇게 형변환이 발생했을 때, 부모클래스와 자식클래스에 동일한 속성이나 메소드가 있으면 자식클래스의 속성이나 메소드로 재정의된다.
▶ Python의 활용
⦁ 객체지향 기능을 지원하는 스크립트 언어
⦁ a = [*, 'abc123' , 'def789' *]
⦁ a[1][-3:] = 1번째 인자, 인덱스 -3번부터 끝까지. = 123
⦁ a[2][:-3] = 2번째 인자, 인덱스 0번부터 -3번까지 = def
⦁ set형식의 add()와 update()는 기존에 존재하는 요소는 냅두고 새로운 요소만 추가한다. 중복된 요소는 저장되지 않는다는 특징이 있다. 그리고 순서가 정해지지 않는 자료형이다.
⦁ 리스트 관련 주요 메소드
- pop(위치) : '위치'에 있는 값을 출력하고 해당 요소를 삭제
- index(값) : '값'이 저장된 위치(인덱스)를 반환
- extend(리스트) : 리스트 끝에 새로운 '리스트'를 추가하여 확장
- reverse() : 역순으로 뒤집는다
- sort() : 정렬한다 기본값은 오름차순. reverse 속성 True:내림차순, False:오름차순
- copy() : 리스트를 복사한다.
(+ copy()를 사용하지 않고 '새로운 리스트' = '기존 리스트' 형식으로 리스트를 복사하면 두 개의 리스트가 같은 메모리공간을 가리키게 되므로, 어느 한 리스트를 수정하면 두 개의 리스트가 모두 수정된다. 그러므로, 새로운 리스트를 복사생성하려면 copy()함수를 사용해야 한다.)
- 세트 관련 주요 메소드
- pop() : 무작위로 한 개의 인수가 삭제된다
- add(값) : 세트에 값을 추가한다
- upate(세트) : 새로운 '세트'를 추가하여 확장한다
- remove(값) : 세트에서 해당 '값'을 찾아 요소를 삭제한다
▶ 절차적 프로그래밍 언어
일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 언어.
⦁ 프로그램이 실행되는 절차를 중요시
⦁ 데이터를 중심으로 프로시저를 구현하며, 프로그램 전체가 유기적으로 연결되어 있음
⦁ 프로시저 : 특정 로직을 처리
⦁ 종류 : C, ALGOL, COBOL, FORTRAN
▶ 객체지향 프로그래밍 언어
⦁ 현실세계의 개체를 기계의 부품처럼 하니의 객체로 만들어 조립해서 제품을 만들듯이, 소프트웨어를 개발할 때도 객체들을 조립해서 프로그램을 작성하는 기법
⦁ 프로시저보다는 명령과 데이터로 구성된 객체를 중심으로 하는 프로그래밍 기법
⦁ 종류
- JAVA : 분산 네트워크 환경에 적용이 가능, 멀티스레드 기능을 제공!, 운영체제 및 하드웨어에 독립적
- C++, SMALTALK
▶ 스크립트 언어(Script Language)
⦁ HTML문서 안에 직접 프로그래밍 언어를 삽입하여 사용하는 언어
⦁ 기계어로 컴파일 되지 않고 별도의 번역기가 소스를 분석하여 동작
⦁ 스크립트 언어의 분류
⦁ 서버용 스크립트 언어
- 서버에서 해석되어 실행된 후, 결과만 클라이언트로 보낸다
- ASP, JSP, PHP, 파이썬
⦁ 클라이언트용 스크립트 언어
- 클라이언트의 웹 브라우저에서 해석되어 실행됨
- 자바스크립트, VB스크립트
- 스크립트 언어의 종류 : 자바스크립트, VB스크립트, ASP(Active Server Page), JSP(Java Server Page), PHP,
- 파이썬 (객체지향 기능을 지원, 대화형 인터프리터 언어(인터프리터 언어 : 원시프로그램을 줄 단위로 번역해서 바로 실행해주는 언어, 목적프로그램을 생성하지 않고, 바로 결과를 출력한다.))
- 쉘 스크립트, BASIC
▶ 선언형 언어
⦁ 프로그램이 수행해야 할 문제를 기술하는 언어
⦁ 분류
- 함수형 언어 (수학적 함수를 조합하여 문제를 해결, 재귀호출이 자주 이용됨) : LISP
- 논리형 언어 (기호 논리학에 기반을 둔 언어, 반복문이나 선택문을 사용하지 X) : PROLOG
- 선언형 언어의 종류 : HTML, LISP, PROLOG, XML, Haskell
▶ 명령형 언어
⦁ 문제를 해결하기 위한 방법을 기술하는 언어
⦁ 폰노이만 구조에 개념적인 기초를 두고 있다
⦁ 명령형 언어에는 절차적 언어와 객체지향 언어가 있다
⦁ 종류 : FORTRAN, COBOL, C, Java
▶ 라이브러리
⦁ 라이브러리, 자주 사용하는 함수나 데이터들을 미리 모아놓은 집합체
⦁ 분류
- 표준 라이브러리 : 기본적으로 포함되어있는 라이브러리, 여러종류의 모듈이나 패키지 형태임
- 외부 라이브러리 : 개발자들이 필요한 기능들을 만들어 공유해놓은 라이브러리, 외부 라이브러리를 다운받아 설치한 후 사용함
- c언어는 라이브러리를 헤더파일로 제공 : stdio.h, math.h, string.h, stdlib.h, time.h
- java는 라이브러리를 패키지에 포함하여 제공
- import문을 이용해 선언한 후 사용
- 선언된 패키지 안에 있는 클래스의 메소드를 사용할 때는, 클래스와 메소드를 마침표(.)로 구분하여 'Math.abs()'와 같이 사용한다
- java.lang, java.util, java.io, java.net, java.awt
- python의 대표적인 표준 라이브러리
- python은 표준 라이브러리라는 하나의 패키지만 존재한다. 그러므로 라이브러리를 사용할 때는 패키지가 아닌 각 클래스를 호출하여 사용
- 내장 함수
- python의 기본적인 인터페이스로, import문이나 클래스명 없이도 사용할 수 있음
- abs(), slice(), pow(), print() 등
- os
- 운영체제와 상호작용 하기 위한 기능을 제공
- getcwd(), chdir(), system() 등
- re
- 고급 문자열 처리를 위한 기능을 제공
- findall(), sub() 등
- math
- 복잡한 수학 연산을 위한 기능을 제공
- cos(), log() 등
- random
- 무작위 선택을 위한 기능을 제공
- choice(), sample(), random(), randrange() 등
- statistics
- 통계값 산출을 위한 기능을 제공
- mean(), median(), variance() 등
- datetime
- 날짜와 시간 조작을 위한 기능을 제공
- today(), date(), strftime() 등
▶ 예외처리
- 예외처리는 예외가 발생했을 때, 프로그래머가 해당 문제에 대비해 작성해놓은 처리 루틴이 수행되도록 하는 것
- 예외란, 프로그램의 정상적인 실행을 방해하는 조건이나 상태를 말함.
- JAVA는 예외를 객체로 취급하며, 예외와 관련된 클래스를 java.lang 패키지에서 제공한다.
- try ~ catch ~finally 문
- 주요 예외 객체 목록
'ETC > 정보처리기사' 카테고리의 다른 글
정보처리기사 실기 요약본 블로그링크 (0) | 2022.04.28 |
---|