[Ⅵ] 프로그래밍 언어 활용 (1)

박은지·2022년 4월 22일
0

Chapter 01. 기본 문법 활용하기


1. 변수 활용

(1) 데이터 타입 (Data Type)

데이터 타입은 프로그래밍 언어에서 여러 종류의 데이터를 식별하는 형태이다.

CC++Java
불린
( Boolean )
xboolboolean
문자
( Character )
charcharchar
문자열
( String )
char [ ]stirngString
정수
( Integer )
intintint
부동소수점
( Floating point )
float (4 byte, 소수점 6자리까지)
double(8 byte, 소수점 15자리까지)
float (4 byte, 소수점 6자리까지)
double(8 byte, 소수점 15자리까지)
float (4 byte, 소수점 6자리까지)
double(8 byte, 소수점 15자리까지)

(2) 기본 저장 공간

A. 변수 (Variable)

변수란 저장하고자 하는 어떠한 값을 주기억장치에 기억하기 위한 공간을 말한다.

Python 은 변수 선언을 하지 않는다.
C , C++ , Java 는 변수 선언을 해야한다.

구분선언
초깃값 X데이터_타입  변수명 ;
초깃값 O데이터_타입  변수명 = 초깃값 ;

B. 배열 (Array)

배열이란 같은 타입의 변수들로 이루어지 집합을 말한다.

C , C++ 의 배열 선언

구분선언
초깃값 X타입  배열명 [ 배열_요소_개수 ] ;
초깃값 O타입  배열명 [ 배열_요소_개수 ] = { 초깃값 } ;
  • 정의된 숫자만큼의 배열 공간이 할당된다.
  • 초깃값을 설정하지 않을 경우 쓰레깃값 저장된다.
  • 정의한 크기보다 적은 개수만큼 초기화할 경우, 초깃값이 명시되지 않은 값들은 자동 0으로 저장된다.
    Ex.  int a[5] = {1, 2}; 와 같이 선언하면 정수타입의 배열 a의 초깃값은 실제로 { 1, 2, 0, 0, 0 }과 같다.

Java 의 배열 선언

구분선언
초깃값 X타입  [ ]배열명 = new 타입[ 배열_요소_개수 ] ;
타입  배열명[ ] = new 타입[ 배열_요소_개수 ] ;
초깃값 O타입  [ ]배열명 = { 초깃값 } ;
  • 정의된 숫자만큼의 배열 공간이 할당된다.
  • 배열의 크기를 명시하지 않고 초깃값을 정의한 경우, 초깃값 개수만큼의 공간이 선언된다.
  • 초깃값을 선언하지 않을 경우, 정수일 때는 0 / 실수일 때는 0.0 / 문자열일 때는 NULL(0)이 저장된다.

C. 포인터 (Pointer)

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

포인터의 선언 방법은 다음과 같다.

데이터_타입*  포인터_변수명 = &변수명 ;

  • 데이터_타입* : 주소를 저장하는 포인터 변수
    -  int형 변수를 가리키는 포인터 변수 선언 시에는 int* ,
    -  char형 변수를 가리키는 포인터 변수 선언 시에는 char* ,
    -  float형 변수를 가리키는 포인터 변수 선언 시에는 float*
  • &변수명 : 해당 변수명의 주솟값
  • *포인터변수 : 주소에 해당하는 값을 가리킬 때에는 * 를 사용한다.

완벽한 이해를 위해 다음 예시를 살펴보자.

// 포인터 예시

int a = 10;  // a는 int형 변수이고, 값은 10
int* b = &a;  // b는 int형 변수를 가리키는 포인터 변수이고, 값은 &a(a의 주솟값)

printf("%d %d", a, *b);  // *b는 주소b가 가리키는(*) 값 (= a의 값)

(3) 자료형

Java

[1]  HashSet

  • Set 의 하위(자식) 클래스
  • 중복된 원소를 허용하지 않는 집합(Set)의 성질을 가진 클래스
  • 순서 중요 X

-  선언

Set  변수명  =  new HashSet( );
HashSet  변수명  =  new HashSet( );

-  Method

메서드설명
add()값을 추가하는 메서드
중복된 값이 들어오면 추가하지 않음
remove()값을 제거하는 메서드
size( )HashSet에 들어있는 원소의 개수를 구하는 메서드

[2]  ArrayList

  • List 의 하위(자식) 클래스
  • 크기가 가변적으로 변하는 선형리스트의 성질을 가진 클래스
  • 순서 중요 O ( 인덱스를 통해 접근 )

-  선언

List  변수명  =  new ArrayList( );
ArrayList  변수명  =  new ArrayList( );

-  Method

메서드설명
add()값을 추가하는 메서드
add( 인덱스 , 값 )해당하는 인덱스에 값을 추가하는 메서드
remove( 인덱스 )해당하는 인덱스의 값을 제거하는 메서드
get( 인덱스 )해당하는 인덱스의 값을 구하는 메서드
size( )ArrayList에 들어있는 원소의 개수를 구하는 메서드

[3]  LinkedList

  • 데이터를 저장하는 노드가 이전 노드와 다음 노드의 상태를 알고 있는 링크드 리스트 자료구조 를 구현한 클래스

    ArrayList 와 동일한 선형 구조이지만
    데이터 검색 시에는 ArrayList 가 더 빠르고, 데이터 삽입 또는 삭제 시에는 LinkedList가 더 빠르다.

-  선언

List  변수명  =  new LinkedList( );
LinkedList  변수명  =  new LinkedList( );

-  Method

메서드설명
add()값을 추가하는 메서드
add( 인덱스 , 값 )해당하는 인덱스에 값을 추가하는 메서드
remove( 인덱스 )해당하는 인덱스의 값을 제거하는 메서드
get( 인덱스 )해당하는 인덱스의 값을 구하는 메서드
size( )ArrayList에 들어있는 원소의 개수를 구하는 메서드

[4]  HashMap

  • Key와 Value로 구성된 객체를 저장하는 구조로 되어 있는 자료구조를 구현한 자료형이자 클래스

-  선언

Map  변수명  =  new HashMap( );
HashMap  변수명  =  new HashMap( );

-  Method

메서드설명
put( 키 , 값 )해당 키에 해당하는 값을 추가하는 메서드
remove()해당 키에 해당하는 값을 제거하는 메서드
get()해당하는 키의 값을 구하는 메서드
size( )HashMap에 들어있는 원소의 개수를 구하는 메서드

Python

[1]  세트(Set)형

  • 중복된 원소를 허용하지 않는 집합의 성질을 가진 자료구조

-  선언

세트명  =  set( [ 요소1, 요소2, ... ] )
세트명  =  { 요소1, 요소2, ... }

-  Method

메서드설명
add()값을 1개 추가하는 메서드
update( [ 값1, 값2, ... ] )여러 개의 값을 한꺼번에 추가하는 메서드
remove()특정 값을 제거하는 메서드

[2]  리스트(List)형

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

-  선언

리스트명  =  [ 요소1, 요소2, ... ]

-  Method

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

-  리스트 인덱싱
여러 값으로 이루어져 있는 리스트는 인덱스를 이용해서 중간 값에 접근할 수 있다.
리스트 안의 요소가 n개라고 가정하면 인덱스는 다음과 같이 표현할 수 있다.

첫 번째 요소두 번째 요소. . .뒤에서 두 번째 요소뒤에서 첫 번째 요소
01. . .n-2n-1
-n-(n-1). . .-2-1

-  리스트 슬라이싱
리스트 슬라이싱은 리스트에서 여러 개의 데이터에 동시에 접근하는 기법을 말한다.

리스트명 [ 시작idx : 종료idx : step ]

  • 리스트명 [ : 종료idx ] 또는 리스트명 [: 종료idx : step ]** 처럼 시작idx를 생략할 경우 처음부터 슬라이싱
  • 리스트명 [ 시작idx : ] 또는 리스트명 [ 시작idx : : step ] 처럼 종료idx를 생략할 경우 마지막까지 슬라이싱
  • step의 기본값은 1이다.
    리스트명 [ 시작idx : 종료idx : ] 또는 리스트명 [ 시작idx : 종료idx ] 처럼 step을 생략할 경우 기본값 1이 적용된다.

[3]  튜플(Tuple)형

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

-  선언

튜플명  =  ( 요소1, 요소2, ... )

-  튜플 인덱싱
여러 값으로 이루어진 튜플은 인덱스를 이용해서 중간값에 접할 수 있다.
튜플 안의 요소가 n개라고 가정하면 인덱스는 다음과 같이 표현할 수 있다.

첫 번째 요소두 번째 요소. . .뒤에서 두 번째 요소뒤에서 첫 번째 요소
01. . .n-2n-1
-n-(n-1). . .-2-1

-  튜플 슬라이싱
튜플 슬라이싱은 튜플에서 여러 개의 데이터에 동시에 접근하는 기법이다.
튜플 슬라이싱 방법은 다음과 같고, 시작idx부터 종료idx 바로 직전까지 step만큼 건너뛴 값에 접근한다.

튜플명 [ 시작idx : 종료idx : step ]

[4]  딕셔너리(Dictionary)형

  • Key와 Value로 구성된 객체를 저장하는 구조로 되어 있는 자료구조

-  선언

딕셔너리명  =  { 키1: 값1, 키2: 값2, ... }

-  요소 추가
   기존 변수에 키와 값을 추가한다.
   기존 변수에 해당 키에 해당하는 값이 이미 존재하면 그 값을 변경한다. (쉽게 말해서 "수정" 기능)

딕셔너리명[ 키 ] = 값

-  요소 삭제
   기존 변수에서 해당 키와 키에 해당하는 값을 삭제한다.

del 딕셔너리명[ 키 ]

(4) 식별자(Identifier)

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

-  식별자 명명 규칙

  • 영문(대문자/소문자) , 숫자 , 밑줄(_) , 달러($) 문자 사용 가능
  • 첫 자리에는 숫자 사용 불가
  • 변수 이름의 중간에는 공백 사용 불가
  • 변수명을 지을 때는 데이터값의 의미나 역할을 표현
  • 이미 사용되고 있는 예약어는 변수명으로 사용 불가

-  식별자 표기법

  • 카멜 표기법 (Camel Case)
    -  첫 단어 시작만 소문자로 표기하고, 각 단어의 첫 글자를 대문자로 표기
    -  예를 들면, camelCase
  • 파스칼 표기법 (Pascal Case)
    -  각 단어의 첫 글자를 대문자로 표기
    -  예를 들면, PascalCase
  • 스네이크 표기법 (Snake Case)
    -  단어와 단어 사이에 언더바(_) 표기
    -  예를 들면, snake_case
  • 헝가리안 표기법 (Hungarian Case)
    -  식별자 표기 시 두어에 자료형을 붙이는 표기법
    int형일 경우 n , char형일 경우 c , 문자열일 경우 sz
    -  예를 들면, nScore은 정수형

2. 연산자

[1] 산술 연산자 (Arithmetic Operator)

연산자내용
+양쪽 값을 더하는 연산자
-왼쪽 값에서 오른쪽 값을 빼는 연산자
*두 개의 값을 곱하는 연산자
/왼쪽 값을 오른쪽 값으로 나누는 연산자
%왼쪽 값을 오른쪽 값으로 나눈 나머지를 구하는 연산자

[2] 시프트 연산자 (Shift Operator)

연산자내용
<<왼쪽 값을 오른쪽 값만큼 비트를 왼쪽으로 이동
>>오른쪽 값을 왼쪽 값만큼 비트를 오른쪽으로 이동

[3] 관계 연산자 (Relation Operator)

연산자내용
>왼쪽 값이 오른쪽 값보다 크면 참, 그렇지 않으면 거짓
<왼쪽 값이 오른쪽 값보다 작으면 참, 그렇지 않으면 거짓
>=왼쪽 값이 오른쪽 값보다 크거나 같으면 참, 그렇지 않으면 거짓
<=왼쪽 값이 오른쪽 값보다 작거나 같으면 참, 그렇지 않으면 거짓
==왼쪽 값과 오른쪽 값이 같으면 참, 그렇지 않으면 거짓
!=왼쪽 값과 오른쪽 값이 다르면 참, 그렇지 않으면 거짓

[4] 논리 연산자(Logic Operator)

연산자내용
&&두 개의 논리값이 모두 참이면 참, 그렇지 않으면 거짓 (AND 연산자)
||두 개의 논리값 중 하나가 참이면 참, 그렇지 않으면 거짓 (OR 연산자)

[5] 비트 연산자(Bit Operator)

연산자내용
&두 값을 연산하여 같은 비트의 값이 모두 1이면 해당 비트 값이 1이고, 그렇지 않으면 0
|두 값을 연산하여 같은 비트의 값이 하나라도 1이면 해당 비트 값이 1이고, 그렇지 않으면 0
^두 값을 연산하여 같은 비트의 값이 서로 다르면 해당 비트 값이 1이고, 그렇지 않으면 0
~모든 비트의 값을 반대로 바꾸는 반전 기능을 하는 연산자

[6] 대입 연산자(Assignment Operator)

연산자내용
=왼쪽 변수에 오른쪽 값 대입
+=왼쪽 변수에 오른쪽 값을 더한 후, 그 결과를 왼쪽 변수에 대입
-=왼쪽 변수에서 오른쪽 값을 뺀 후, 그 결과를 왼쪽 변수에 대입
*=왼쪽 변수에 오른쪽 값을 곱한 후, 그 결과를 왼쪽 변수에 대입
/=왼쪽 변수를 오른쪽 값으로 나눈 후, 그 결과를 왼쪽 변수에 대입
%=왼쪽 변수를 오른쪽 값으로 나눈 후, 그 나머지를 왼쪽 변수에 대입

[7] 증감 연산자(Increment & Decrement Operator)

연산자내용
++x변수의 값을 1 증가시킨 후 해당 변수를 사용
x++변수를 사용한 후 변수의 값을 1 증가시킴
--x변수의 값을 1 감소시킨 후 해당 변수를 사용
x--변수를 사용한 후 변수의 값을 1 감소시킴

[8] 삼항 연산자

조건 ? 참일때값 : 거짓일때값

3. 표준 함수

C 언어

(1) 출력 함수

  1. 단순 출력

    printf( 문자열 );

  2. 개행

    printf( "\n" );

  3. 변수 출력

    printf( 포맷_스트링 , 변수명 );

포맷 스트링

유형포맷 스트링설명
문자형%c
%s
문자
문자열
정수형%d
%x
%o
10진수
16진수
8진수
실수형%f
%[전체자리수].[소수점자리수]
실수

(2) 입력 함수

  1. 변수값 입력

    scanf( 포맷_스트링 , &변수명 );

  2. 문자열 입력

    scanf( "%s" , 배열명 );

C++

(1) 출력 함수

  1. 단순 출력

    std::cout << 문자열 ;

  2. 개행

    std::endl;

  3. 변수 출력

    std::cout << 변수명 ;

(2) 입력 함수

std::cin >> 변수명

Java

(1) 출력 함수

  1. 단순 출력

    System.out.printf( 문자열 );    :  포맷 스트링을 사용하여 변수 출력
    System.out.print( 문자열 );

  2. 개행

    System.out.print( "\n" );
    System.out.println( 문자열 );

  3. 변수 출력

    System.out.print( 변수명 );
    System.out.println( 변수명 );
    System.out.printf( 포맷_스트링 , 변수명 );

(2) 입력 함수

  1. 정수형 입력

    Scanner 스캐너_변수명 = new Scanner( System.in );
    입력받을_변수명 = 스캐너__변수명.nextInt( );

  2. 실수형 입력

    Scanner 스캐너_변수명 = new Scanner( System.in );
    입력받을_변수명 = 스캐너변수명.nextFloat( ); 또는 스캐너변수명.nextDouble( );

  3. 문자열 입력

    Scanner 스캐너_변수명 = new Scanner( System.in );
    입력받을_변수명 = 스캐너__변수명.nextLine( );

Python

(1) 출력 함수

  1. 단순 출력

    print( 문자열 )

  2. 개행

    print( 문자열 , end=' ' )

  3. 변수 출력

    print( 변수명 )

(2) 입력 함수

  1. 문자열 입력

    변수명 = input( )

  2. 숫자 입력

    변수명 = input( )
    변수명 = eval( 변수명 )

4. 명령문

(1) 조건문

if 문

조건이 참인지 거짓인지에 따라 경로를 선택하는 조건문

C , C++ , Java 의 if 문

if ( 조건문 ) {
	명령문 ;
} else if ( 조건문) {
	명령문 ;
} else {
	명령문 ;
}

Python 의 if 문

if 조건문 :
	명령문
elif 조건문 :
    명령문
else :
	명령문

switch 문

조건에 따라 여러 개의 선택 경로 중 하나를 취하고자 할 때 사용하는 조건문

C , C++ , Java 의 switch 문

switch () {
case1 :
	명령문 ;
    break ;
case2 :
	명령문 ;
    break ;
case3 :
	명령문 ;
    break ;
default :
	명령문 ;
}
  • switch 문에서는 조건에 해당하는 case 로 이동
  • 해당하는 case 종료 시 break 가 있으면 switch 문 탈출
  • break 가 존재하지 않으면 break 를 만날 때까지 switch 문에 있는 다른 문장 실행

Python 에서는 switch 문을 지원하지 않는다.

(2) 반복문

while 문

시작과 종료 조건을 지정하여 참인 동안에는 해당 명령을 반복해서 실행하는 명령문

C , C++ , Java 의 while 문

while ( 조건문 ) {
	명령문 ;
}

Python 의 while 문

while 조건문 :
	명령문 

for 문

초깃값, 최종값, 증감값을 지정하여 반복을 실행하는 명령문

C , C++ , Java 의 while 문

for ( 초깃값 ; 최종값 ; 증감값 ) {
	명령문 ;
}

Python 의 while 문

# 시작값 & 끝값
for 변수 in range ( 시작값 , 끝값 + 1 ) :
	명령문 
    
# 반복횟수
for 변수 in range ( 반복횟수 ) :
	명령문 

(3) 루프 제어 명령어

반복문에서 "무한 루프"를 방지하기 위해 break와 continue 명령어를 사용한다.

종류설명
break반복문을 중지하도록 하는 명령어
continue다음 반복으로 넘어갈 수 있도롣 하는 명령어

break 문

반복문이나 switch 문을 중간에 탈출하기 위해 사용하는 명령어

continue 문

반복문에서 다음 반복으로 넘어갈 수 있도록 하는 명령어

5. 사용자 정의 자료형 활용

사용자 정의 자료형

사용자 정의 자료형은 사용자가 상황에 맞게 기존 자료형들을 조합해서 만드는 자료형으로, 열거체와 구조체가 있다.

(1) 열거체

열거체는 서로 연관된 정수형 상수들의 집합이다.
정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다.
C, C++에서는 멤버에 초깃값을 설정하지 않으면 0부터 차례대로 할당된다.

C , C++ 에서 사용하는 enum

enum 열거체명 {
	멤버1,
   	멤버2,
    . . .
};

(2) 구조체

구조체는 사용자가 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형이다.
Java 와 Python 에서는 지원하지 않는다. ( class를 이용하여 struct 기능을 구형할 수는 있다. )

C , C++ 에서 사용하는 struct

struct 구조체명 {
	자료형 변수명1;
   	자료형 변수명2;
    . . .
};

6. 사용자 정의 함수

사용자 정의 함수는 사용자가 직접 새로운 함수를 정의하여 사용하는 방법이다.

C , C++ , Java 에서 사용하는 사용자 정의 함수

반환_데이터_타입 함수명 ( 데이터_타입_변수명 , . . . ) {
	명령어 ;
    return 반환값 ;
}

Python 에서 사용하는 사용자 정의 함수

def 함수명 ( 변수명 , . . . ) :
	명령어 
    return 반환값 

7. 재귀함수

재귀함수는 함수 자신이 자신을 부르는 함수이다.

C , C++ , Java 에서 사용하는 재귀함수

반환_데이터_타입  함수명 ( 데이터_타입  변수명 , ... ) {
	. . .
    함수명 ( 변수명 , ... )
    . . .
    return 반환값 ;
}

Python 에서 사용하는 재귀함수

def 함수명 ( 변수명, ... ) :
	. . .
    함수명 ( 변수명, ... )
    . . .
    return 반환값

8. 클래스 (Class)

(1) 접근 제어자 (Access Modifier)

접근 제어자는 지정된 클래스, 변수, 메서드를 외부(같은 패키지 혹은 다른 패키지)에서 접근할 수 있도록 권한을 설정하는 기능을 한다.

public
-  외부의 모든 클래스에서 접근 가능

protected
-  동일 패키지 내부에 있는 클래스, 하위 클래스(상속받은 경우) 접근 가능
-  자기 자신과 상속받은 하위 클래스 둘 다 접근 가능

default
-  접근 제어자를 명시하지 않은 경우
-  같은 패키지 내부에 있는 클래스에서 접근 가능
-  Java에만 존재하는 접근 제어자

private
-  같은 클래스 내에서만 접근 가능

(2) 클래스 (Class)

A. 클래스 정의

  C++ 클래스 정의

class 클래스명 {
private :
	변수_타입 변수명 ;
public :
	반환_데이터_타입 메서드명 ( 데이터_타입 변수명, ... ) {
    	명령어 ;
        return 반환값 ;
    }
};

  Java 클래스 정의

public class 클래스명 {
	private 변수_타입 변수명 ;
    public 반환_데이터_타입 메서드명 ( 데이터_타입 변수명 , ... ) {
    	명령어 ;
        return 반환값 ;
    }
}

  Python 클래스 정의
  Python에서는 함수명에 매개변수(parameter) 앞에 self 키워드를 붙여주어야 한다.

class 클래스명 :
	def 메서드명 ( self, 변수명, ... ) :
    	명령어
        return 반환값

B. 자신 클래스 참조

 [1]  this 포인터
  this 포인터는 현재 객체를 가리키는 포인터이다.
  C++ 과 Java에서 지원하는 것으로, 클래스 내부의 변수와 함수를 가리킬 수 있다.

  C++ this 포인터

this -> 변수명 ;
this -> 함수명( 매개변수 );

  Java this 포인터

this.변수 ;
this.함수명( 매개변수 );

 [2]  self
  self는 현재 객체를 가리키는 포인터이다.
  Python에서 지원하고, 클래스 내부의 변수와 함수를 가리킬 수 있다.

  Python self

self.변수명
self.함수명( 매개변수 );

C. 클래스 선언

  C++ 클래스 선언

// 일반 변수
클래스 클래스변수( 매개변수 );  // 생성시
클래스변수.메서드( 매개변수 );  // 클래스 내 메서드 사용

// 포인터 변수 사용
클래스* 클래스변수 = new 클래스( 매개변수 );  // 생성시
클래스변수 -> 메서드( 매개변수 );  // 클래스 내 메서드 사용
delete 클래스변수;  // 소멸시

  Java 클래스 선언

클래스 클래스변수 = new 클래스( 매개변수 );  // 생성시
클래스변수.finalize();  // 소멸시

  Python 클래스 선언

클래스변수 = 클래스( 매개변수 )  # 생성시
del 클래스변수  # 소멸시

(3) 생성자 (Constructor)

생성자는 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드이다.
일반적으로 클래스의 멤버 변수를 초기화하거나, 클래스를 사용하는데 설정이 필요할 경우 사용한다.

C++ 에서 사용하는 생성자
C++ 에서는 클래스명과 동일한 메서드명을 가지고, 반환값이 없다.

class 클래스명 {
public :
	클래스명 ( 데이터_타입 변수명, ... ) {
    	명령어 ;
    }
};

Java 에서 사용하는 생성자
C++ 와 동일하게 Java 에서도 클래스명과 동일한 메서드명을 가지고, 반환값이 없다.

public class 클래스명 {
    public 클래스명 ( 데이터_타입 변수명 , ... ) {
    	명령어 ;
    }
}

Python 에서 사용하는 생성자
Python 에서는 __init__ 이라는 메서드명을 사용하고, 첫 번째 매개변수(patameter)로 self 를 적어주며, 반환값은 없다.

class 클래스명 :
	def __init__ ( self, 변수명, ... ) :
    	명령어

(4) 소멸자 (Destructor)

소멸자는 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용되는 메서드이다.

C++ 에서 사용하는 소멸자
C++ 에서는 클래스명과 동일한 메서드명을 가지고 ~ 기호를 사용하며, 매개변수(patameter)와 반환값이 없다.

class 클래스명 {
public :
	~클래스명 ( ) {
    	명령어 ;
    }
};

Java 에서 사용하는 소멸자
Java 에서는 finalize 라는 메서드를 사용하고, 반환값이 없다.

public class 클래스명 {
    public void finalize ( 매개변수 ) {
    	명령어 ;
    }
}

Python 에서 사용하는 소멸자
Python 에서는 __del__ 이라는 메서드명을 사용하고, 첫 번째 매개변수(patameter)로 self 를 적어주며, 반환값은 없다.

class 클래스명 :
	def __del__ ( self ) :
    	명령어

(5) 상속 (Inheritance)

상속은 어떤 객체가 존재할 때, 그 객체의 변수와 메서드를 다른 객체가 물려받는 개념을 말한다.

C++ 상속

class 부모_클래스명 {
};
class 자식_클래스명 : public 부모_클래스명 {
};

Java 상속

class 부모_클래스명 {
}
class 자식_클래스명 extends 부모_클래스명 {
}

Python 상속

class 부모_클래스명 :
	. . . 
class 자식_클래스명 ( 부모_클래스명 ) :
	. . . 

A. 오버로딩 ( Overloading )

오버로딩은 동일 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의할 수 있는 기능이다.
Python에서는 오버로딩을 지원하지 않는다.

다음은 오버로딩의 특징이다.

  • 메서드의 이름이 같아야 한다.
  • 매개변수 개수가 달라야 한다.
  • 매개변수 개수가 같을 경우, 데이터 타입이 달라야 한다.
  • 반환형은 같거나 달라도 된다.

B. 오버라이딩 ( Overriding )

오버라이딩은 하위 클래스에서 상위 클래스를 재정의 할 수 있는 기능을 말한다.

다음은 오버라이딩의 특징이다.

  • 오버라이드하고자 하는 메서드가 상위 클래스에 존재해야 한다.
  • 메서드 이름은 동일해야 한다.
  • 메서드 매개변수의 개수 & 데이터 타입도 동일해야 한다.
  • 메서드 반환형이 같아야 한다.

C++ 오버라이딩
C++ 에서는 virtual 키워드가 있어야만 오버라이딩이 가능하다.

class 부모_클래스명 {
public :
	virtual 반환_데이터_타입 메서드명 ( 데이터_타입 변수명 ) {
    }
};

class 자식_클래스명 : public 부모_클래스명 {
public :
	virtual 반환_데이터_타입 메서드명 ( 데이터_타입 변수명 ) {
    	// 부모 클래스의 메서드명 & 매개변수 동일
    }
};

Java 오버라이딩

class 부모_클래스명 {
	public 반환_데이터_타입 메서드명 ( 데이터_타입_변수명 ) {
    }
}

class 자식_클래스명 extends 부모_클래스명 {
	public 반환_데이터_타입 메서드명 ( 데이터_타입_변수명 ) {
    	// 부모 클래스의 메서드명 & 매개변수 동일
    }
}

Python 오버라이딩

class 부모_클래스명 :
	def 메서드명 ( self, 변수명 ) :
    	# 명령어
        
class 자식_클래스명 ( 부모_클래스명 ) :
	def 메서드명 ( self, 변수명 ) :
    	# 명령어
        # 부모 클래스의 메서드명 & 매개변수의 개수 동일

(6) 추상클래스

추상클래스는 미구현 추상메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상메서드를 반드시 구현하도록 강제하는 기능이다.

C++ 추상클래스
C++ 에서는 virtual 키워드가 있어야만 오버라이딩이 가능하다.

class 클래스명 {
public :
	virtual 데이터_타입 메서드명 ( ) = 0;
};

Java 추상클래스

abstract class 클래스명 {
	abstract  데이터_타입 메서드명 ( );
}

Python 추상클래스

class 클래스명 :
	def 메서드명 ( self ) :
    	pass

(7) 인터페이스

인터페이스는 일종의 추상클래스로, Java의 다형성을 극대화하여 코드의 수정을 줄이고 유지보수를 쉽도록하는 문법이다.

오직 추상메서드와 상수만을 멤버로 가질 수 있고, 그 외 어떠한 요소도 허용하지 않는다.
인터페이스는 구현된 것은 아무것도 없는 상태로, 밑그림만 그려진 "기본 설계도"라고 이해한다.

Java 인터페이스

interface 클래스명 {
	데이터_타입 메서드명 ( );
}

0개의 댓글