01 프로그래밍을 위한 기본 사항
진수
특정 개수의 숫자만을 이용하여 수를 나타내는 수의 체계이다
10진수를 n 진수로 변환
- 10 진수 값을 몫이 n 보다 작을 때까지 n 으로 나누고 나머지 값을 표시
10진수 이하일때는 0~9를 사용하지만 , 10진 수 초과시 10을 넘어가는 값은 영어로 표기
10 A
11 B
12 C
13 D
14 E
15 F
N진수를 10진수로 변환
- n 진수에서 마지막 자리는 자리 숫자에 자리값인 n 0제곱을 곱하고, 마지막에서 두번째 자리는 자리 숫자에 자리값인 n 1 제곱을 곱하고, 마지막에서 세 번째 자리는 자리 숫자에 자리값인 n2 제곱을 곱하고 ... 다 더해 10진수를 구한다
- 16진수 C9를 10진수로 변환 = 12 * 16 + 9 * 1 = 201
아스키 코드
- 아스키 코드는 미국 ANSI 에서 표준화한 정보교환용 부호체계이다
- 영문 키보드로 입력할 수 있는 모든 기호가 할당된 기본적인 부호 체계이다
- A = 65
- a = 97
- 0 = 48
- 1 = 49
- c언어에서 0 = null
02 C언어
- c 언어는 본문 전에 처리하는 전처리부분과 본문으로 구성되어 있다
- 헤더는 xxx.h 파일로 되어 있고, 헤더 안에는 프로그래밍에 필요한 함수들이 포함되어 있다
전처리기(Preprocessor) 개념
- 실행 파일을 생성하는 과정에서 소스 파일 내에 존재하는 전처리 지시문을 처리하는 작업
- C 언어에서 # 이 붙으면 전처리 지시문, 전처리기라고 표현
#include
- c 언어 프로그램에 헤더 파일을 포함할 때 사용하는 전처리기
#define
- 매크로를 정의할 때 사용하는 전처리기
- 상수값을 지정하기 위한 예약어로 구문의 상수로 치환할때 사용하는 전처리기
자료형
- 프로그래밍 언어에서 실수값, 정수값과 같은 여러 종류의 데이터를 식별하는 형태이다
- 메모리 공간을 효율적으로 사용하고 2진수 데이터를 다양한 형태로 사용하기 위해 존재한다
- 문자 Character = char
- 정수 Integer = int
- 부동 소수점 floating point = float, double
식별자
- 변수, 상수, 함수 등 서로를 구분하기 위해서 사용되는 이름이다
- 영문 대문자/소문자, 숫자, 밑줄의 사용이 가능
- 첫자리에서는 숫자를 사용할 수 없음
- 변수 이름의 중간에는 공백을 사용할 수 없음
- 이미 사용되고 있는 예약어의 경우 사용 불가능(For , If, while 사용가능)
식별자 표기법 🔔 (2020 년 3회)
카멜 표기법(Camel Case)
- inputFunction
- 식별자 표기시 여러단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫글자는 대문자로 지정하는 표기법
파스칼 표기법(Pascal Case)
- InputFunction
- 식별자 표기시 여러단어 가 이어지면 각 단어의 첫 글자는 대문자로 지정하는 표ㅕ기법
스네이크 표기법(Snake Case)
-input_function
- 식별자 표기시에 여러단어가 이어지면 단어 사이에 언더바를 넣는 표기법
헝가리안 표기법(Hungarian Case)
- 식별자 표기시 접두어에 자료형을 붙이는 표기법
- int 의 경우 n, char 의 경우 c, 문자열일 경우 sz 를 서술한다.
연산자 우선순위 : 증산시 관비 논삼대
#include <stdio.h>
void main(){
int x=3, y=3;
x++;
++y;
printf("%d %d",x,y);
}
'''
출력 값
4 4
'''
printf -> 개행 하려면 /n 필요
static 변수
프로그램이 시작될때 생성 끝날때 없어짐.
#include <stdio.h>
void fn(){
static int a = 3;
a = a + 1;
print("%d\n", a);
}
void main(){
fn();
fn();
}
'''
출력 값
4
5
'''
포맷 스트링
%[-][0][전체자리수].[소수점자리수]스트링
#include <stdio.h>
void main(){
int a=4, c=5;
char b = 'A';
printf("a는 %d b는 %c입니다."a,b);
printf("%d",a+c);
}
'''
출력값
a는 4 b는 65 입니다.
9
'''
#include <stdio.h>
void main(){
float a = 1.234;
int b = 10;
printf("%.2f\n",a); // 소수점 두번째자리까지 출력
printf("%5.1f\n",a); // 전체자리수 5개, 소수점 1번째 자리까재지 출력
printf("%05.1f\n",a); // 전체자리수 5개, 소수점 1번째 자리, 공백은 0으로 채움
printf("%-5f\n",a); // 전체자리수 5개, 왼쪽정렬
}
출력
1.23
(공백)(공백)(공백)1.2
001.2
10
문자열함수
strcat(a,b) : a에 b 를 연결
strcpy(a,b) : b를 a 에 복사
strcmp(a,b) : a,b 대소 비교
strrev(a) : 해당 문자열 전환
strchr(str,c) : str 에 c 문자가 존재하는지 , 존재 시 해당 존재 첫번째 위치 포인터 변수로 저장, 출력시 해당 위치부터 출력
strlen(str) : 문자열의 길이 반환
#include <stdio.h>
#include <string.h>
void main(){
char a[20] = "Hello";
char b[10] = "Soojebi";
char c[20] = "Hello";
#문자열 연결
strcat(a,b);
printf("%s %s \n",a,b);
strncat(c,b,3);
printf("%s %s \n",c,b);
#문자열 복사
strcpy(a,b);
printf("%s %s \n",a,b);
strncpy(c,b,3);
printf("%s %s \n",c,b);
}
'''
출력 값
HelloSoojebi Soojebi
HelloSoo Soojebi
Soojebi Soojebi
Soolo Soojebi
'''
수학함수
sqrt : 제곱 계산
ceil : 소수점 올림
floor : 소수점 내림
유틸리티 함수
atoi : 문자열을 정수로
atof : 문자열을 실수로 "1.0" => 1.00
itoa(value, str, 진수) : 정수형을 문자열로 변환
포인터 🔔
- 변수의 주소값을 저장하는 공간
- 표기법 : 자료형* 포인터변수명 = &변수명;
- 자료형 뒤에 * 를 붙이면 주소를 저장하는 포인터 변수라는 의미
- 변수명에 & 를 붙이면 해당 변수의 주솟값을 의미
- 주소에 해당하는 값을 가리킬 때는 * 를 사용한다
배열과 포인터
구분 | 코드 |
배열의 i번지 주소 | 배열 + i == &배열[i] a+1 == &a[1] |
배열의 i번지 값 | *(배열+i) == 배열[i] *(a) == a[0] |
#include <stdio.h>
void main(){
int a[2][3] = {1,2,3,4};
int i,j;
for(i=0; i<2; i++)
for(j=0; j<3; i++)
printf("%d", a[i][j]);
}
'''
a[0][0] = 1
a[0][1] = 2
a[0][2] = 3
a[1][0] = 4
a[1][1] = 0
a[1][2] = 0
출력 값
123400
'''
헷갈리는 부분 !!! ✨✨✨✨
#include <stdio.h>
void main(){
int a[3][2] = {1,2,3,4,5,6};
int *p=a[1];
printf("%d %d %d \n", *a[0], *a[1], *a[2]);
printf("%d %d %d \n", **a, **(a+1), **a(a+2));
printf("%d %d \n", *p, *(p+1));
printf("%d %d \n", p[0], p[1]);
}
'''
12
34
56
*(p+1) = *(a[1] + 1)
p[0] = a[1][0]
p[1] = a[1][1]
출력 결과
1 3 5
1 3 5
3 4
3 4
'''
2차원 배열과 1차원 포인터✌️✌️✌️✌️✌️
#include <stdio.h>
void main(){
int a[3][2] = {{1,2},{3,4},{5,6}};
int *p = a[1];
printf("%d %d %d\n", *a[0], *a[1], *a[2]);
printf("%d %d %d\n", **a, **(a+1), **(a+2));
printf("%d %d\n", *p, *(p+1));
printf("%d %d\n", p[0], p[1]);
}
답
1 3 5
1 3 5
3 4
3 4
값 | 주소 |
1 | &a[0][0] |
2 | &a[0][1] |
3 | &a[1][0] |
4 | &a[1][1] |
5 | &a[2][0] |
6 | &a[2][1] |
03 자바
2021년 1회
public class test{
public static void main(String[] args){
int[][] a = new int[3][2];
System.out.println(a.length);
System.out.println(a[0].length);
}
}
출력
3 : a 배열의 행의 개 수
2 : a[0]배열의 개수
표준 출력 함수
print() : 개행을 하지 않는 출력함수
println() : 개행을 하는 출력함수
printf() : c언어 처럼 변수를 출력할 수 있는 출력 함수
static 메서드⭐⭐⭐
- static 메서드는 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메서드이다.
- 인스턴스를 생성하지않아도 호출이 가능하게 된다.
public class A{
public static void main(String[] args){
System.out.println(A.check(1));
}
static String check(int num){
return(num>=0)? "positive":"negative";
}
}
클래스⭐⭐⭐
- 클래스는 객체 지행 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀이다
클래스 접근제어자 종류
- 접근제어자는 지정된 클래스, 변수, 메서드를 외부에서 접근할 수 있도록 권한을 설정하는 기능이다
종류 | 설명 |
public | 외부의 모든 클래스에 접근이 가능한 접근제어자 |
protected | 같은 패키지 내부에 있는 클래스, 하위 클래스에서 접근이 가능한 접근 제어자 자기자신과 상속받은 하위클래스 둘 다 접근이 가능한 접근 제어자 |
default | 접근 제어자를 명시하지 않은 경우로 패키지 내부에 있는 클래스에서 접근가능 |
private | 같은 클래스 내에서만 접근이 가능한 접근 제어자 |
생성자⭐⭐⭐
- 해당 클래스의 객체가 생성될때 자동으로 호출되는 특수한 종류의 메서드이다
- 생성자는 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는데 필요한 설정이 필요한 경우 사용한다
- 클래스명과 동일한 메서드명을 가지고 반환값이 없다
클래스 상속⭐⭐⭐
- 상속은 어떤 객체가 있을 때 객체의 변수와 메서드를 다른 객체가 물려받는 기능
- 자식 클래스를 생성하면 무조건 부모 클래스의 생성자를 실행한 후에 자식 클래스의 생성자를 실행
class parentClass{
}
class childClass extends parentClass{
}
class A{
public void fnA(){
System.out.println("A");
}
}
class B extends A{
public void fnB(){
System.out.prinln("B");
}
}
public static void main(String[] args){
B b = new B();
b.fnA(); // B 클래스에는 fnA 메서드 없으므로 부모 클래스에서 가져온다 출력 - A
b.fnB(); // B 클래스에 존재하는 fnB 메서드를 실행한다 - B
}
오버로딩⭐⭐⭐
- 동일한 이름의 메서드를 매개변수만 다르게 해서 여러개로 정의할 수 있다
- 메서드 이름이 같아야한다
- 매개변수 개수가 달라야 한다
- 매개변수 개수가 같을 경우 데이터 타입이 달라야한다
- 반환형은 같거나 달라도 된다
오버라이딩⭐⭐⭐
- 하위클래스에서 상위클래스의 메서드를 재정의 할 수 있다
class A{
public void fn(){
System.out.println("A");
}
}
class B extends A{
public void fn(){
System.out.println("B");
}
}
public class App {
public static void main(String[] args) throws Exception {
A a = new B();
a.fn(); // B 출력
}
}
부모 클래스 접근
- 자바는 super 키워드를 이용하여 상위 클래스의 변수나 메서드에 접근할 수 있다
super.메서드명();
추상클래스 Abstract Class
-추상 클래스는 미구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능이다
abstract class A{
abstract fnA();
}
class B extends A{
fnA(){
명령어;
}
}
인터페이스
- 인터페이스는 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법이다
- 구현된 것이 없고 밑그림만 있는 설계도
interface A{
void fnA();
}
class B implements A{
public fnA(){
System.out.println("B");
}
}
스레드 Thread
- 스레드는 프로세스보다 가벼운, 독립적으로 수행되는 순차적인 제어의 흐름
- 실행단위
- 스레드를 만들기 위해서는 Thread 클래스를 상속받고, run() 메서드에 스레드 동작 시 수행할 코드를 작성
class T_Soojebi extends Thread{
public void run(){
System.out.println("Run");
}
}
public class Soojebi {
public static void main(String[] args){
Thread t1 = new T_Soojebi();
Thread t2 = new Thread(new T_Soojebi());
t1.start();
t2.start();
System.out.println("Main");
}
}
컬렉션 Collection
- 컬렉션 프레임워크는 다수의 데이터를 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다
- 자바에서는 컬렉션 프레임 워크를 통해 모든 컬렉션 클래스와 인터페이스를 제공한다
List : LinkedList, ArrayList
Set : HashSet, TreeSet
Map: Hashtable , HashMap, TreeMap
List 예시
public class A{
public static void main(String[] args){
List a = new ArrayList();
a.add(2);
System.out.println(a); // [2]
a.add(1);
System.out.println(a); // [2, 1]
a.add(1);
System.out.println(a); // [2, 1, 1]
a.add(1,3);
System.out.println(a); // [2, 3, 1, 1]
a.remove(2);
System.out.println(a); // [2,3,1]
System.out.println(a.get(2)); // 1
System.out.println(a.size()); // 3
}
}
Set 예시
public class A{
public static void main(String[] args){
/*
add(값) - 값을 추가, 중복된 값이 들어오면 추가하지 않음!!!!
remove(값) - 값을 제거하는 메서드(List 인터페이스랑 다름***)
size() - 원소의 개수를 얻는 메소드
*/
Set h = new HashSet();
h.add(2);
System.out.println(h); //[2]
h.add(1);
System.out.println(h); //[2,1]
h.add(1);
System.out.println(h); //[2,1]
h.remove(1);
System.out.println(h); //[2]
}
}
Map 예시
public class A{
public static void main(String[] args){
/*
put(키,값)
remove(키)
get(키)
size()
*/
Map h = new HashMap();
h.put(1, "A");
System.out.println(h); // {1=A}
h.put(1,"C");
System.out.println(h); // {1=C}
h.put(2,"D");
System.out.println(h); // {1=C, 2=D}
h.remove(1);
System.out.println(h); // {2=D}
}
}
예외처리
- 프로그램이 동작 중에 의도하지 않은 비정상적인 동작을 처리하는 기법
- try 다음에 수행할 명령문에서 예외가 발생하면 catch 에서 예외를처리
- catch 는 하나 이상 작성하며, 상황에 맞는 예외처리가 수행됨
- finally 문장은 예외처리 끝나고 반드시 실행되어야 하는 명령문을 수행함
public class A{
public static void main(String[] args){
try{
int a = 4/0;
}
catch(Exception e){
System.out.println(e.getMessage);
}
finally{
System.out.println("finally");
}
}
}
04 파이썬
구분 | 유형 | 설명 |
시퀀스자료형 | 문자열형(String) | s = "test" |
리스트형(List) | i = [1,2,3] | |
튜플형(Tuple) | i = (1,2,3) | |
비시퀀스자료형 | 세트형(Set) | i = {1,2,3} - 중복 불가 - 데이터가 숫자일시 자동정렬 |
딕셔너리형(Dictionary) | {'s':1, 'j':2, 'b':3} - 요소변경 : 딕셔너리명[키] = 값 - 요소제거 : del 딕셔너리명[키] |
a = [10, 20, 30]
print(a) // [10, 20, 30]
a.extend(a)
print(a) // [10, 20, 30, 10, 20, 30]
a.pop()
print(a) // [10, 20, 30, 10, 20]
a.reverse()
print(a) // [20, 10, 30, 20, 10]
l = [3, 5, 7]
l.append(3)
print(l) // [3, 5, 7, 3]
l.insert(2,4)
print(l) // [3, 5, 4, 7, 3]
l.remove(3)
pring(l) // [5, 4, 7, 3]
시퀀스 자료형 요소 접근 방법 - 인덱싱
print("abcdefg"[3]) // d
print("abcdefg"[-1]) // g
시퀀스 자료형 요소 접근 방법 - 슬라이싱
// 시퀀스변수명[시작:종료:스텝]
// 시작 : 생략할경우 처음부터 슬라이싱
// 종료 : 생략할경우 마지막까지 슬라이싱, 종료인덱스에 있는 인덱스 전까지만 슬라이싱
print("pythontest"[1:]) // ythontest
print("pythontest"[2:4]) // th
print("pythontest"[:3]) // pyt
a = [4, 2, 7, 3, 5]
print(a[0:4:2]) // [4,7]
Swap 연산자
a, b = 10,20
print(a)
print(b)
a, b = b , a
print(a)
print(b)
/*
10
20
20
10
*/
산술 연산자
print(3/2)
print(3//2)
print(3**2)
print(3%2)
/*
1.5
1
9
1
*/
람다 함수
- 람다함수는 함수 이름 없이 동작하는 함수이다
- 매개변수에 값을 전달하면 표현식에서 연산을 수행한다
- lambda 매개변수 : 표현식
//(lambda 매개변수: 표현식)
(lambda n, m: n + m)(2,3) // 5
생성자
- 해당 클래스 의 객체가 생성될때 자동으로 호출되는 특수한 종류의 메서드이다
'정보처리기사' 카테고리의 다른 글
정보처리기사 실기 - UI 요구사항 확인(15일차) (0) | 2023.07.10 |
---|---|
정보처리기사 실기 - SQL 응용 개념 정리 (8~9일차) (0) | 2023.07.04 |
정보처리기사 실기 - 요구사항확인 (10~12일차) (0) | 2023.06.23 |
정보처리기사 필기 3과목 - 데이터베이스 구축 - 오답정리 (0) | 2023.05.11 |
정보처리기사 필기 2과목 - 소프트웨어 개발 (2) | 2023.05.10 |