28. [기본 문법 활용하기] 변수 활용

수제비 2022 정보처리기사 실기 수험서를 보고 공부한 기록입니다.


👉데이터 타입

1. 데이터 타입(Data Type)의 개념

  • 데이터 타입은 프로그래밍 언어에서 실수치, 정수 자료형과 같은 여러 종류의 데이터를 식별하는 형태이다
  • 메모리 공간을 효율적으로 사용하고 2진수 데이터를 다양한 형태로 사용하기 위해 존재한다

2. 데이터 타입 유형

  • 불린(Boolean)
    • 조건이 참인지 거짓인지 판단하고자 할 때 사용하는 데이터 타입
    • C 언어에서는 미지원
    • 자바에서는 참일 경우 true, 거짓일 경우 false로 표현
    • 파이썬에서는 참일 경우 True, 거짓일 경우 False로 표현
  • 문자(Character)
    • 문자 하나를 저장하고자 할 때 사용하는 데이터 타입
    • 메모리에 저장은 숫자로 저장됨
  • 문자열 타입(String)
    • 나열된 여러 개의 문자를 저장하고자 할 때 사용하는 타입
    • C 언어는 char 배열을 사용하여 구현
  • 정수 타입(Integer)
    • 정수값을 저장하고자 할 때 사용하는 데이터 타입
  • 부동 소수점(Floating Point)
    • 소수점을 포함하는 실수값을 저장하고자 할 때 사용하는 데이터 타입

👉기본 저장 공간

1. 변수

① 일반 변수

㉮ 변수(Varible)의 개념

  • 변수는 저장하고자 하는 어떠한 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간이다
  • 자료형과 변수명을 작성하여 변수를 생성하는 과정이다
  • C, 자바에서는 변수 선언을 하고, 파이썬에서는 별도로 변수 선언을 하지 않는다

㉯ 변수 선언

  • 불린, 문자, 정수, 실수 등을 선언할 때 사용
  • 초기값이 없는 경우: 데이터_타입 변수명;
  • 초기값이 있는 경우: 데이터_타입 변수명=초기값;
float a; //실수형 변수 a 선언
int b=0; //초기값 0인 정수형 변수 b 선언

② static 변수

  • static 변수는 프로그램이 시작될 때 변수를 초기화하고, 프로그램이 종료되기 전까지 메모리가 유지되는 변수이다
  • 변수를 static으로 생성하면 처음에 한 번만 초기화가 되며, 함수에 의해서 변수 선언 부분이 여러 번 호출되더라도 초기화하지 않는다

㉮ C 언어의 static 변수

#include <stdio.h>
void increase(){  //increase 함수 선언
	static int count=0; //static 정수형 변수 count를 선언과 동시에 0으로 초기화
    
	printf("count=%d\n", count); //count 값을 화면에 출력함
	count++; //count 값 1 증가시킴
}

void main(){ //main 함수 선언
	increase(); //increase 함수 호출
   	increase(); //increase 함수 호출
}

count=0
count=1

  • static 변수는 프로그램이 종료하기 전까지 변수가 사라지지 않고 계속 유지된다
  • increase 함수를 호출할 때 count는 static 변수이므로 처음 한 번만 count 값이 0으로 초기화되고, increase 함수를 두 번째 호출할 때 static int count=0;을 만나더라도 count를 0으로 초기화하지 않는다

㉯ 자바의 static 변수

class Soojebi{
	static int count=0; //정수형 static 변수 count를 선언하고 0으로 초기화
}

public class SoojebiMain{
	public static void main(String[] args){
		Soojebi s=new Soojebi(); //Soojebi 클래스 객체 s 생성
		s.count++; //s의 count 값을 1 증가시킴
		System.out.println(s.count); //화면에 s의 count 값을 출력함
		s.count++; //s의 count 값을 1 증가시킴
		System.out.println(s.count); //화면에 s의 count 값을 출력함
	}
}

1
2

2. 배열

① 배열(Array) 개념

  • 배열은 같은 타입의 변수들로 이루어진 집합이다

② 1차원 배열 선언

㉮ C 언어의 1차원 배열 선언

  • 초기값이 없는 경우: 타입 배열명[배열_요소_개수];
  • 초기값이 있는 경우: 타입 배열명[배열_요소_개수]={초기값};
  • 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 할당된다
  • 초기값을 선언하지 않을 경우 쓰레기값이 저장된다
  • 배열 요소 개수보다 적은 개수만큼 초기화할 경우 초기값이 명시되지 않은 값들은 자동으로 0으로 초기화된다
#include <stdio.h>
void main(){
	int a[4]={1, 2};
	int i;
	//a 배열의 요소 개수는 4개지만, 
   	//초기값은 1, 2로 두 개만 명시되어 있으므로 나머지 2개의 공간은 0으로 초기화
    
	for(i=0; i<4; i++)
	printf("%d\n", a[i]); //0번째 요소부터 3번째 요소의 값을 출력
}

1
2
0
0

㉯ 자바의 배열 선언

  • 초기값이 없는 경우
    • 타입[ ] 배열명=new 타입[배열_요소_개수];
    • 타입 배열명[ ]=new 타입[배열_요소_개수];
  • 초기값이 있는 경우: 타입[ ] 배열명={초기값};
  • 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 선언된다
  • 배열 요소 개수를 명시하지 않고 초기값이 정의되어 있을 경우 초기값 개수만큼 공간이 선언된다
  • 초기값을 선언하지 않을 경우 정수일 때는 0, 실수일 때는 0.0, 문자열일 때는 NULL이 저장되어 있다
  • 불린, 문자, 정수, 실수 등을 배열로 선언할 때 사용한다
  • 자바에서 배열의 크기를 구할 때는 length 속성을 사용한다
class Soojebi{
	public static void main(String[] args){
    	int[] a=new int[3]; //int 형 변수 3개 선언
		System.out.println(a.length); //a 배열의 개수를 출력
	}
}

3

③ 2차원 배열 선언

㉮ C 언어의 2차원 배열 선언

  • 초기값이 없는 경우: 타입 배열명[행의 개수][열의 개수];
  • 초기값이 있는 경우: 타입 배열명[행의 개수][열의 개수]={초기값};
  • (행의 개수)×(열의 개수)에 정의된 숫자만큼 같은 타입의 데이터 공간이 할당된다
  • 초기값을 선언하지 않으면 쓰레기값이 저장된다
  • (행의 개수)×(열의 개수)보다 적은 개수만큼 초기화할 경우 초기값이 명시되지 않은 값들은 0으로 초기화된다

■C 언어 2차원 배열 선언 및 출력 예제

#include <stdio.h>
void main(){
	int a[2][3]={1,2,3,4};
	int i,j;
	/*
    a 배열의 요소 개수는 2x3개지만, 초기값은 1,2,3,4만 명시되어 있으므로
 	나머지 2개의 공간은 0으로 초기화
    */
	for(i=0;i<2;i++){ 
		for(j=0;j<3;j++){ 
			printf("%d",a[i][j]);
		}
	}
    /*
    처음에 i=0일 때 j=0일 때부터 j<3인 j=2까지 반복
    a[0][0] 값인 1, a[0][1] 값인 2, a[0][2] 값인 3을 출력
    다음에 i=1일 때 j=0일 때부터 j<3인 j=2까지 반복
    a[1][0] 값인 4, a[1][1] 값인 0, a[1][2] 값인 0을 출력
    */
}

1 2 3 4 0 0

㉯ 자바 언어의 2차원 배열 선언

  • 초기값이 없는 경우
    • 타입[][] 배열명=new 타입[행의 개수][열의 개수];
    • 타입 배열명[][]=new 타입[행의 개수][열의 개수];
  • 초기값이 있는 경우: 타입[][] 배열명={{초기값}, {초기값}, ...};
  • 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 선언된다
  • 배열 요소 개수를 명시하지 않고 초기값이 정의되어 있을 경우 초기값 개수만큼 공간이 선언된다
  • 초기값을 선언하지 않을 경우 정수일 때는 0, 실수일 때는 0.0, 문자열일 때는 NULL이 저장되어 있다
  • 불린, 문자, 정수, 실수 등을 배열로 선언할 때 사용한다
  • 자바에서 배열의 크기를 구할 때는 length 속성을 사용한다

■자바 length 속성 사용 예제

class Soojebi{
	public static void main(String[] args){
		int[][] a=new int[3][2]; //int형 변수 3x2개 선언
		System.out.println(a.length); //a 배열의 행의 개수를 출력
		System.out.println(a[0].length); //a[0] 배열의 개수를 출력
	}
}

3
2

■자바 length 속성 사용 예제

class Soojebi{
	public static void main(String[] args){
		int[][] a={{1,2}, {3}, {4,5,6}}; //int형 2차원 배열 선언
		System.out.println(a.length); //a 배열의 행의 개수를 출력
		System.out.println(a[0].length); //a[0] 배열의 개수를 출력
		System.out.println(a[1].length); //a[1] 배열의 개수를 출력
		System.out.println(a[2].length); //a[2] 배열의 개수를 출력
	}
}

3
2
1
3

3. 포인터

① 포인터(Pointer) 개념

포인터는 변수의 주소값을 저장하는 공간이다

② 포인터 선언

데이터_타입* 포인터_변수명 = &변수명;
  • 데이터 타입 뒤에 *를 붙이면 주소를 저장하는 포인터 변수라는 의미이고, 일반 변수명에 &를 붙이면 해당 변수명의 주소값이다
  • int형 변수를 가리키는 포인터 변수 선언 시 int*를, char형 변수를 가리키는 포인터 변수 선언 시 char*를, float형 변수를 가리키는 포인터 변수 선언 시 float*를 사용해야 한다
  • 주소에 해당하는 값을 가리킬 때에는 *를 사용한다
int a=10;
int* b=&a;
printf("%d %d", a, *b);
//b가 가리키는 * 값은 a이므로 *b와 a는 값이 같음

4. 배열과 포인터

①1차원 배열과 1차원 포인터

  • 1차원 배열에서 배열명만 단독으로 사용할 경우 1차원 포인터와 동일하다
  • 1차원 배열일 때 배열명[요소] 형태, *(배열명+요소), 1차원 포인터일 때 포인터[요소] 형태, *(포인터+요소)일 경우 값을 가리킨다
  • 데이터_타입 배열명[요소]; 일 때 다음 코드는 동일하다

▼배열의 주소와 0번지 값

  • 배열의 주소: 배열명==&배열명[0];
  • 배열의 0번지 값: 배열명[0]==*배열명;
  • ex) int a[4]; 일 때 a 배열의 주소인 a는 &a[0]와 동일하고, a의 0번지 값인 a[0]은 *a와 동일하다

■C 언어 1차원 배열과 1차원 포인터

#include <stdio.h>
void main(){
	int a[3]={1,2};
	int *p=a;
	//a 배열의 요소 개수는 3개지만, 초기값은 1,2만 명시되어 있으므로 나머지 1개의 공간은 0으로 초기화
	printf("%d %d %d\n", a[0],a[1],a[2]);
	//a 배열의 0번지, 1번지, 2번지 값을 출력
	printf("%d %d %d\n", *a,*(a+1),*(a+2));
	//a만 단독으로 쓰면 포인터이므로 a가 가리키는 값, a+1이 가리키는값, a+2가 가리키는 값 출력
	printf("%d %d %d\n", *p, *(p+1),*(p+2));
	//p는 a랑 동일하므로 *p,*(p+1),*(p+2)는 각각 *a, *(a+1),*(a+2)와 동일하게 출력
	printf("%d %d %d\n", p[0],p[1],p[2]);
    //p는 a랑 동일하므로 p[0],p[1],p[2]는 a[0],a[1],a[2]와 동일하게 출력
}

1 2 0
1 2 0
1 2 0
1 2 0

② 2차원 배열과 1차원 포인터

  • 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하다
  • 2차원 배열일 때 배열명[요소] 형태, *(배열명+요소)는 1차원 포인터와 동일하고, 1차원 포인터에 대해 *과 []을 이용해야 값을 가리킬 수 있다
#include <stdio.h>
void main(){
	int a[3][2]={1,2,3,4,5,6}; 
    //2차원 배열 선언
	int *p=a[1];
	//a 배열의 1번지 주소(1차원 포인터)를 p라는 1차원 포인터 변수에 저장
	printf("%d %d %d\n", *a[0],*a[1],*a[2]);
	//a[] 형태는 1차원 포인터와 같으므로 *을 붙이면 값을 가리킬 수 있음
	printf("%d %d %d\n", **a, **(a+1),**(a+2));
	//a 형태는 2차원 포인터와 같으므로 *를 두 번 붙여야 값을 가리킬 수 있음
	printf("%d %d\n", *p, *(p+1));
	/*
    p는 a[1]이라고 초기화를 했으므로 *p는 각각 a[1]이 가리키는 값인
    a[1][0]을 출력하고, *(p+1)는 a[1]이 가리키는 &a[1][0]에서 한 칸 뒤의 값인
    a[1][1]의 값을 출력
    */
	printf("%d %d\n", p[0],p[1]);
    //*p와 p[0]는 동일하고 *(p+1)은 p[1]과 동일하므로 a[1][0], a[1][1] 값이 출력됨
}

1 3 5
1 3 5
3 4
3 4

③ 2차원 배열과 포인터 배열

#include <stdio.h>
void main(){
	int a[3][2]={1,2,3,4,5,6}; //2차원 배열 선언
	int *p[3]={a[2],a[0],a[1]};
	//a 배열의 2,0,1번지 주소(1차원 포인터)를 p라는 포인터 배열에 저장
	printf("%d %d %d\n", a[0][0], a[1][0], a[2][0]);
	//2차원 배열 출력
	printf("%d %d %d\n", *a[0], *a[1], *a[2]);
	//a[] 형태는 1차원 포인터와 같으므로 *를 붙여야 값을 가리킬 수 있음
	printf("%d %d %d\n", p[1][0], p[2][0], p[0][0]);
	/*
    p[1]은 a[0]이므로 p[1][0]은 a[0][0]를 출력, p[2]는 a[1]이므로 p[2][0]은 a[1][0]을 출력
    p[0]는 a[2]이므로 p[0][0]은 a[2][0]를 출력
    */
	printf("%d %d %d\n", *p[1], *p[2], *p[0]);
    //p[1][0]과 *p[1]과 동일하고, p[2][0]과 *p[2]와 동일하고, p[0][0]과 *p[0]이 동일
}

1 3 5
1 3 5
1 3 5
1 3 5

④ 2차원 배열과 2차원 포인터

  • 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하다
  • 2차원 배열일 때 배열명[요소][요소], *배열명[요소], **(배열명+요소)일 경우 값을 가리킨다
#include <stdio.h>
void main(){
	int a[3][2]={1,2,3,4,5,6}; //2차원 배열 선언
	int (*p)[2]=a;
	int (*p)[2]=a;
	int (*q)[2]=a+1; 
	/*
    p, q라는 2차원 배열 변수에 a 배열의 0, 1번지 주소를 2차원 포인터 변수에
    저장(a는 2차원 배열로 a만 단독으로 사용하면 2차원 포인터이므로 2차원 포인터 형태로 선언)
	*/
	printf("%d %d %d\n", a[0][0], a[0][1], a[1][0]);  
    //a를 2차원 배열 형태로 출력
	printf("%d %d %d\n", p[0][0], p[0][1], p[1][0]); 
	//p는 2차원 포인터로 a랑 같으므로 2차원 배열처럼 사용 가능
	printf("%d %d %d\n", q[0][0], q[0][1], q[1][0]);
    //q는 2차원 포인터로 a[1][0] 번째를 시작점으로 2차원 배열과 동일하게 사용 가능
}

1 2 3
1 2 3
3 4 5

⑤ 1차원 배열과 문자열

  • 문자열을 초기화할 때 마지막에 NULL 문자가 삽입되므로 초기화하는 글자수보다 1 이상 큰 값으로 배열을 선언한다(초기화할 때 배열의 크기를 명시하지 않으면 문자열의 문자 수 +1만큼 자동으로 생성)
  • printf 함수에서 %s를 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전값까지 읽어서 출력한다
#include <stdio.h>
void main(){
	char a[7]="Hello";
	//1차원 char 배열 선언
	printf("%s\n", a);
	//시작점 a에 해당하는 값인 a[0]부터 NULL 값 전인 a[4]까지 출력
	printf("%s\n", a+1);
	//시작점 a+1에 해당하는 값인 a[1]부터 NULL 값 전인 a[4]까지 출력
	a[4]=NULL;
    //a[4]의 값을 NULL로 변경
	printf("%s\n", a+1);
    //시작점 a+1에 해당하는 값인 a[1]부터 NULL 값 전인 a[3]까지 출력
    (a[4]NULL로 바뀌었으므로 a[3]까지 출력)
}

Hello
ello
ell

⑥ 2차원 배열의 문자열

  • 문자열을 여러 개 정의할 때 2차원 배열을 사용한다
  • printf 함수에서 %s를 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전 값까지 읽어서 출력한다
#include <stdio.h>
void main(){
	char a[2][8]={"Hello", "Soojebi"};
	//2차원 char 배열 선언 a[0]에는 "Hello"가, a[1]에는 "Soojebi"가 저장
	printf("%s\n", a[0]);
	//시작점 a[0]에 해당하는 값인 a[0][0]부터 NULL 값 전인 a[0][4]까지 출력
	printf("%s\n", a[1]);
	//시작점 a+1에 해당하는 값인 a[1][0]부터 NULL 값 전인 a[1][7]까지 출력
	a[0][4]=NULL;
   	//a[0][4]의 값을 NULL로 변경
	printf("%s\n", a[0]+2);
	//시작점 a[0]+2에 해당하는 값인 a[0][2]부터 NULL 값 전인 a[0][3]까지 출력
	printf("%s\n", a[1]+3);
   	//시작점 a[1]+3에 해당하는 값인 a[1][3]부터 NULL 값 전인 a[1][7]까지 출력
}

Hello
Soojebi
ll
jebi

👉자료형

1. 자바

  • HashSet
    • 중복된 원소를 허용하지 않는 집합(Set)의 성질을 가진 클래스
    • 순서가 중요하지 않음
  • ArrayList
    • 크기가 가변적으로 변하는 선형리스트의 성질을 가진 클래스
    • 순서가 중요함(인덱스를 통해 접근 가능)
  • LinkedList
    • 데이터를 저장하는 노드가 이전 노드와 다음 노드의 상태를 알고 있는 링크드 리스트 자료구조를 구현한 클래스
  • HashMap
    • 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조를 구현한 클래스

① HashSet 형

㉮ HashSet 개념

  • HashSet은 Set의 자식 클래스(하위 클래스; 파생 클래스)로 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료형이며 클래스이다

㉯ HashSet 선언

  • Set 변수명=new HashSet();
  • HashSet 변수명=new HashSet();
  • Set은 HashSet의 부모 클래스(상위 클래스)이기 때문에 타입 선언 시 Set과 HashSet 둘 다 상관없으나 HashSet의 기능을 사용하기 위해서는 대입 부분에 HashSet()으로 생성해야 한다

㉰ HashSet 메소드

  • add(값)
    • 값을 추가하는 메소드
    • 중복된 값이 들어오면 추가하지 않음
  • remove(값)
    • 값을 제거하는 메소드
  • size()
    • HashSet에 들어있는 원소의 개수를 얻는 메소드
public static void main (String[] args){
	Set h=new HashSet();	//h라는 변수에 HashSet 클래스 생성
	h.add(2);	//HashSet에 2가 추가
	System.out.println(h);	//[2]가 출력됨

	h.add(1);
	System.out.println(h);
	//HashSet에 1이 추가되어 1, 2가 있으므로 [1, 2]가 출력됨(집합에서 순서는 중요하지 않음)
	h.add(1);
	System.out.println(h);
	//HashSet에 1이 추가되었지만 이미 1이 있으므로 추가되지 않음
	h.remove(1);
   	//HashSet에서 1을 제거
	System.out.println(h);
	//HashSet에 2만 남았으므로 [2]가 출력됨
	System.out.println(h.size());
   	//HashSet에 2라는 원소 1개만 있으므로 1이 출력
}

[2]
[1, 2]
[1, 2]
[2]
1

② ArrayList 형

㉮ ArrayList 개념

  • ArrayList는 List의 자식 클래스로 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료형이며 클래스이다

㉯ ArrayList 선언

  • List 변수명=new ArrayList();
  • ArrayList 변수명=new ArrayList();
  • List는 ArrayList의 부모 클래스(상위 클래스)이기 때문에 타입 선언 시 List와 ArrayList의 기능을 사용하기 위해서는 대입 부분에 ArrayList()로 생성해야 한다

㉰ ArrayList 메소드

  • add(값): 값을 추가하는 메소드
  • add(인덱스, 값): 해당 인덱스(번지)에 값을 추가하는 메소드
  • remove(인덱스): 해당 인덱스(번지)에 값을 제거하는 메소드
  • get(인덱스): 해당 인덱스(번지)에 값을 얻는 메소드
  • size(): ArrayList에 들어있는 원소의 개수를 얻는 메소드
public static void main(String[] args){
    List a=new ArrayList();
    //a라는 변수에 ArrayList 클래스 생성
    a.add(2);
    //ArrayList에 2추가
    System.out.println(a);
    //[2]가 출력됨
    a.add(1);
    System.out.println(a);
    //ArrayList에 1이 추가되어 [2, 1]이 출력됨(순서가 중요함)
    a.add(1);
    System.out.println(a);
    //ArrayList에 1이 추가되어 [2,1,1]이 출력됨(중복 값 허용)
    a.add(1, 3);
    System.out.println(a);
    /*
    ArrayList의 1번지에 3이라는 값이 추가되어 
    현재 0번지인 2와 1번지인 1 사이에 값 추가
    */
    a.remove(2);
    System.out.println(a);
    //ArrayList의 2번지에 있는 값인 1을 제거
    System.out.println(a.get(2));
    System.out.println(a.size());
    //ArrayList의 2번지에 있는 값 출력 및 원소 개수 출력
}

[2]
[2,1]
[2,1,1]
[2,3,1,1]
[2,3,1]
1
3

③ HashMap 형

㉮ HashMap 개념

  • HashMap은 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조를 구현한 자료형이며 클래스이다

㉯ HashMap 선언

  • Map 변수명=new HashMap();
  • HashMap 변수명=new HashMap();
  • Map은 HashMap의 부모 클래스(상위 클래스)이기 때문에 타입 선언 시 Map과 HashMap 둘 다 상관없으나 HashMap의 기능을 사용하기 위해서는 대입 부분에 HashMap()으로 생성해야 한다

㉰ HashMap 메소드

  • put(키, 값): 해당 키에 해당하는 값을 추가하는 메소드
  • remove(키): 해당 키에 해당하는 값을 제거하는 메소드
  • get(키): 해당 키에 해당하는 값을 얻는 메소드
  • size(): HashMap에 들어있는 원소의 개수를 얻는 메소드
public static void main (String[] args){
    Map h=new HashMap();
    //h라는 변수에 HashMap 클래스 생성
    h.put(1, "A");
    System.out.println(h);
    //h에 1에 해당하는 값으로 A를 추가
    h.put(1, "C");
    System.out.println(h);
    /*
    h에서 1에 해당하는 값으로 C를 추가
    (1에 해당하는 값은 기존 A에서 C로 변경됨)
    */
    h.put(2, "D");
    System.out.println(h);
    //h에서 2에 해당하는 값으로 D를 추가
    h.remove(1);
    System.out.println(h);
    //h에서 키값인 1에 해당하는 값을 삭제
    System.out.println(h.get(2));
    //h에서 키값이 2에 해당하는 값을 출력
    System.out.println(h.size());
    //h에서 요소의 개수를 출력
}

{1=A}
{1=C}
{1=C, 2=D}
{2=D}
D
1

2. 파이썬

  • 세트형: 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료구조
  • 리스트형: 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료구조
  • 튜플형: 초기에 선언된 값에서 값을 생성, 삭제, 수정이 불가능한 형태의 자료구조
  • 딕셔너리형: 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료구조

① 세트(Set)형

㉮ 세트형 개념

  • 세트형은 중복된 원소를 허용하지 않는 집합의 성질을 가지고 있는 자료형이다

㉯ 세트형 선언

  • 세트명=set([요소1, 요소2, ...])
  • 세트명={요소1, 요소2, ...}
  • set라는 키워드로 세트형을 초기화하거나 {, }를 이용하여 세트형을 선언한다

㉰ 세트형 메소드

  • add(값): 값을 1개 추가하는 메소드
  • update([값1, 값2, ...]): 여러 개의 값을 한꺼번에 추가하는 메소드
  • remove(값): 특정 값을 제거하는 메소드
s={1,5,7}
#s라는 변수에 1,5,7 값을 세트형으로 초기화
s.add(3) #s에 3이 없으므로 3이 추가됨
print(s)

s.add(5) #s에 5를 추가하지만 이미 5가 있으므로 변화 없음
print(s)

s.update([1,2,3,4]) #s에 1,2,3,4를 한 번에 추가하지만 1과 3은 이미 있으므로 2,4만 추가
print(s)

s.remove(1) #s에서 1을 제거
print(s)

{1,3,5,7}
{1,3,5,7}
{1,2,3,4,5,7}
{2,3,4,5,7}

② 리스트(List)형

㉮ 리스트형 개념

  • 리스트는 크기가 가변적으로 변하는 선형리스트의 성질을 가지고 있는 자료형이다

㉯ 리스트형 선언

  • 리스트명=[요소1, 요소2, ...]
  • [, ]를 이용하여 리스트형을 선언한다

㉰ 리스트형 메소드

  • append(값): 리스트 마지막 요소 뒤에 값을 추가하는 메소드
  • insert(인덱스, 값): 리스트의 인덱스 위치에 값을 삽입하는 메소드
  • remove(값)
    • 리스트에서 해당하는 값을 제거하는 메소드
    • 해당하는 값이 여러 개 있을 경우 가장 앞에 있는 값을 제거

㉱ 리스트 인덱싱

  • 리스트는 여러 값으로 이루어져 있는데 인덱스를 이용해서 중간값에 접근할 수 있다
  • 리스트가 n개의 값을 가질 때 인덱스는 다음과 같다
첫 번째 요소두 번째 요소...뒤에서 두 번째 요소마지막 요소
01...(n-2)(n-1)
-n-(n-1) -2-1

㉲ 리스트 슬라이싱

  • 리스트 슬라이싱은 리스트에서 여러 개의 데이터에 동시에 접근하는 기법이다
  • 리스트명[시작_인덱스:종료_인덱스:스텝]

[시작 인덱스]

  • 슬라이싱을 시작할 인덱스
  • 생략할 경우 '리스트명[ : 종료_인덱스]' 또는 '리스트명[ : 종료_인덱스 : 스텝]' 형태가 됨
  • 생략할 경우 처음부터 슬라이싱

[종료 인덱스]

  • 슬라이싱을 종료할 인덱스
  • 종료 인덱스에 있는 인덱스 전까지만 슬라이싱
  • 생략할 경우 '리스트명[시작_인덱스 : ]' 또는 '리스트명[시작_인덱스 : : 스텝]' 형태가 됨
  • 생략할 경우 마지막까지 슬라이싱

[스텝]

  • 몇 개씩 끊어서 슬라이싱을 할지 결정하는 값
  • 생략할 경우 '리스트명[시작_인덱스 : 종료_인덱스]' 또는 '리스트명[시작_인덱스 : 종료_인덱스 : ]' 형태가 됨
  • 생략할 경우 1이 기본값
l=[3,5,7]
#l이라는 변수에 3,5,7 값을 리스트형으로 초기화
l.append(3)
#l의 맨 뒤에 3을 추가
print(l)
#3,5,7 뒤에 3이 추가되어 [3,5,7,3]
l.insert(2,4)
print(l)
#l의 2번지에 4라는 값을 추가(2번지는 세번째 값이므로 세 번째에 4추가)
l.remove(3)
print(l)
#l에서 3을 제거하는데 3은 두 개이므로 앞의 3이 지워짐
print(l[ : 2])
#콜론(:)앞에 생략되어 있으므로 시작 인덱스가 0이 되고, 0번지부터 1번지까지 접근

[3,5,7,3]
[3,5,4,7,3]
[5,4,7,3]
[5,4]

③ 튜플형

㉮ 튜플(Tuple)형 개념

  • 튜플형은 초기에 선언된 값에서 값을 생성, 삭제, 수정이 불가능한 형태의 자료형이다

㉯ 튜플형 선언

  • 튜플명=(요소1, 요소2, ...)
  • (, )를 이용하여 튜플형을 선언한다

㉰ 튜플 인덱싱

  • 튜플은 여러 값으로 이루어져 있는데 인덱스를 이용해서 중간값에 접근할 수 있다
  • 튜플이 n개의 값을 가질 때 인덱스는 다음과 같다
첫 번째 요소두 번째 요소...뒤에서 두 번째 요소마지막 요소
01...(n-2)(n-1)
-n-(n-1) -2-1

㉱ 튜플 슬라이싱

  • 튜플 슬라이싱은 튜플에서 여러 개의 데이터에 동시에 접근하는 기법이다
  • 튜플명[시작_인덱스: 끝_인덱스 : 스텝] → 시작 인덱스부터 끝 인덱스 바로 전 인덱스까지 스텝 값만큼 건너뛴 값을 접근

④ 딕셔너리형

㉮ 딕셔너리(Dictionary)형 개념

  • 딕셔너리형은 키와 값으로 구성된 객체를 저장하는 구조로 되어 있는 자료형이다

㉯ 딕셔너리형 선언

  • 딕셔너리명={키1:값1, 키2:값2, ...}
  • {, } 안에 콜론(:)을 이용하여 키와 값을 구분하여 선언한다

㉰ 딕셔너리형 요소 추가

  • 딕셔너리명[키]=값
  • 기존 변수에 키와 값을 추가한다
  • 기존 변수에 해당 키에 해당하는 값이 있었으면 값을 변경한다

㉱ 딕셔너리형 요소 삭제

  • del 딕셔너리명[키]
  • 기존 변수에서 해당 키와 키에 해당하는 값을 삭제한다
d={'A':5, 'C':4}
print(d)
#d라는 변수에 키가 'A'일 때 값을 5로, 'C'일 때 값을 4로 초기화

d['K']=7
print(d)
#d라는 변수에 키가 'K'일 때 값을 7로 저장

del d['C']
print(d)
#d라는 변수에 키가 'C'에 해당하는 값을 삭제

d['K']=6
print(d)
#d라는 변수에 키가 'K'일 때 값을 6으로 저장(기존에 키가 'K'일 때 값이 7에서 6으로 변경)

👉식별자

① 식별자(Identifier) 개념

  • 식별자는 변수, 상수, 함수 등 서로 구분하기 위해서 사용되는 이름이다
  • 프로그램의 구성요소를 구별하기 위해 사용한다

② 식별자 명명 규칙

[사용 가능 문자]

규칙사용 가능 예시사용 불가능 예시
영문 대문자/소문자, 숫자, 밑줄('_')의 사용이 가능a, A, a1, _, _hello?a, <a

[변수 사용 규칙]

규칙 사용 가능 예시사용 불가능 예시 
첫 자리에는 숫자를 사용할 수 없음_1, a1, a1001, 1a, 1A, 1234
변수 이름의 중간에는 공백을 사용할 수 없음my_studentmy student

[변수 의미 부여]

규칙사용 가능 예시사용 불가능 예시
데이터값의 의미나 역할을 표현age, student 
이미 사용되고 있는 예약어의 경우에는 변수로 사용할 수 없음For, If, Whileint, short, long, for, while, do, continue, break, if, else

③ 식별자 표기법

카멜 표기법(Camel Case)

  • 식별자 표기 시에 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫 글자는 대문자로 지정하는 표기법
  • ex) inputFunction

파스칼 표기법(Pascal Case)

  • 식별자 표기 시에 여러 단어가 이어지면 각 단어의 첫 글자는 대문자로 지정하는 표기법
  • ex) InputFunction

스네이크 표기법(Snake Case)

  • 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더바를 넣는 표기법
  • ex) input_function

헝가리안 표기법(Hungarian Case)

  • 식별자 표기 시 두어에 자료형을 붙이는 표기법 
  • 식별자 표기 시에 int형일 경우 n, char형일 경우 c, 문자열일 경우 sz를 붙임
  • ex) nScore->정수형

좋은 웹페이지 즐겨찾기