2022. 9. 1. 17:36ㆍ정처기(필기)/프로그래밍언어활용
(1) 사용자 정의 자료형의 개념
- 사용자 정의 자료형은 사용자가 상황에 맞게 기존 자료형들을 조합해서 만드는 자료형이다.
- 사용자 정의 자료형에는 열거체, 구조체가 있다.
(2) 사용자 정의 자료형 종류
1. 열거체
- 열거체는 서로 연관된 정수형 상수들의 집합이다.
- 정수형 상수에 이름을 붙여서 코드를 이해하기 쉽게 해준다.
- C에서는 멤버에 초깃값을 설정하지 않으면 9부터 차례대로 할당된다.
ex)
enum 열거체명 {
멤버1,
멤버2,
.......
}
2. 구조체
- 구조체는 사용자가 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형이다.
- 자바, 파이썬에서는 지원하지 않는다.
ex)
struct 구조체명 {
자료형 변수명1;
자료형 변수명2;
......
}
① 구조체 변수와 구조체 포인터
- 구조체는 일반 구조체 변수로 접근할 때는 .으로 접근하고, 구조체 포인터로 접근할 때는 ->로 접근한다.
② 1차원 구조체 배열과 1차원 구조체 포인터
- 1차원 구조체 배열에서 배열명만 단독으로 사용할 경우 1차원 구조체 포인터와 동일하다.
- 1차원 구조체 배열일 때 배열명[요소], 변수명 형태, (*(배열명+요소)).변수명, 배열명 -> 변수명 형태, (배열명 + 요소) -> 변수명 형태로 값을 가리킨다.
- 1차원 포인터일 때 포인터[요소].변수명 형태, (*(포인터+요소)).변수명, 포인터->변수명 형태, (포인터+요소) -> 변수명 형태로 값을 가리킨다.
(3) main 함수
- main 함수는 프로그램이 실행하는 모든 프로그램의 시작점이다.
- main 함수에 있는 명령어를 실행한다.
1. C 언어의 main 함수
타입 main(파라미터) {
명령어;
}
-> void main()일 경우 return 반환값;을 사용하지 않고, int main()일 경우 return 반환값;을 명시해주어야 한다.
2. 자바의 main 함수
public static void main(String[] args) {
명령어;
}
(4) 사용자 정의 함수
- 사용자 정의 함수는 사용자가 직접 새로운 함수를 정의하여 사용하는 방법이다.
▼ C, 자바에서 사용하는 사용자 정의 함수
반환_데이터_타입 함수명(데이터_타입_변수명, ...) {
명령어;
return 반환값;
}
▼ 파이썬에서 사용하는 사용자 정의 함수
def 함수명(변수명, ...) :
명령어
return 반환값
(5) 함수 포인터
- 함수 포인터는 함수의 주소를 저장하고, 해당 주소의 함수를 호출하는 데 사용하는 포인터이다.
ex)
리턴타입 (*함수_포인터)(함수 파라미터);
(6) 매개변수 전달방법
- 매개변수 전달은 함수가 필요로 하는 값을 매개변수로 만들면 함수를 호출하는 쪽에서 매개변수를 사용하여 해당 함수에 변수의 값, 변수의 주솟값을 전달하는 방식이다.
1. 매개변수 종류
구성요소 | 설명 |
전달인자 (Argument) |
실 매개변수로도 불림 함수가 함수 호출하는 쪽에서 전달받는 변수의 값 또는 변수의 주소값 |
매개변수 (Parameter) |
형식 매개변수로도 불림 함수를 호출하는 쪽에서 전달하는 변수의 값 또는 변수의 주소값 |
#include <stdio.h>
int fn(int x, int y) { //<- 전달인자(Arguments)
........
}
void main() {
int i, j;
...
fn(i, j); //->매개변수(Parameters)
}
2. 매개변수 전달방법
- Call by Value : 변수의 값을 넘겨주고, 이 값은 새로운 공간에 할당되어 사용하는 방식, 형식 매개변수의 어떠한 변화도 실 매개변수에 아무런 영향을 미치지 않음
- Call by Referenct : 변수의 값이 아닌 변수가 사용 중인 메모리 공간의 주소를 넘겨주는 방식, 실 매개변수의 주소를 형식 매개변수로 보냄
ex)
[1] : Call by Value
#include <stdio.h>
int fn(int x, int y) {
.....
}
void main() {
int i, j;
...
fn(i, j);
}
[2] : Call by Reference
#include <stdio.h>
int fn(int x, int* y) {
...
}
void main() {
int i, j;
...
fn(&i, &j);
}
3. 재귀 함수
- 재귀 함수는 함수 자신이 자신을 부르는 함수이다.
(7) 클래스
- 클래스는 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 틀이다.
- C언어는 명령형 프로그래밍으로 클래스를 지원하지 않는다.
1. 접근 제어자
- 접근 제어자는 지정된 클래스, 변수, 메소드를 외부에서 접근할 수 있도록 권한을 설정하는 기능이다.
▼접근 제어자 종류
종류 | 설명 |
public | 외부의 모든 클래스에서 접근이 가능한 접근 제어자 |
protected | 같은 패키지 내부에 있는 클래스, 하위 클래스에서 접근이 가능한 접근 제어자 자기 자신과 상속받은 하위 클래스 둘 다 접근이 가능한 접근 제어자 |
default | 접근 제어자를 명시하지 않은 경우로 같은 패키지 내부에 있는 클래스에서 접근이 가능한 접근 제어자 자바에만 접근하는 접근 제어자 |
private | 같은 클래스 내에서만 접근이 가능한 접근 제어자 |
2. 클래스 사용
- 클래스는 변수와 메소드 형태로 구성되어 있다.
- 클래스에서 변수는 변수 선언과 동일하고, 메소드는 메소드 사용자 정의함수와 문법이 동일하다.
- 파이썬은 별도로 변수 선언을 하지 않기 때문에 메소드 형태로 구성되어 있다.
▼ 파이썬 클래스 정의
class 클래스명 :
def 메소드명(self, 변수명, ...)
명령어
return 반환값
-> 파이썬에서는 함수명에 입력받을 값(매개변수) 앞에 self라는 키워드를 적어야 한다.
[1] : 자신 클래스 참조
① this 포인터
- this 포인터는 현재 객체를 가리키는 포인터이다.
- 자바에서 사용하는 것으로 클래스 내부의 변수와 함수를 가리킬 수 있다.
ex)
this.변수;
this.함수(매개변수);
② self
- self는 현재 객체를 가리키는 포인터이다.
- 파이썬에서 사용하는 거승로 클래스 내부의 변수와 함수를 가리킬 수 있다.
ex)
self.변수명;
self.함수명(매개변수);
[2] : static 메소드
- 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메소드이다.
- 인스턴스를 생성하지 않아도 호출이 가능하게 된다.
[3] : 클래스 선언
- 클래스를 일반변수로 선언한 경우 선언함과 동시에 생성자가 호출되고, 일반변수로 선언한 곳에서 함수가 종료되면 소멸자가 호출된다.
▼ 자바 클래스 선언
클래스 클래스변수 = new 클래스(매개변수);
클래스변수.finalize(); -> 소멸시
▼파이썬 클래스 선언
클래스변수 = 클래스(매개변수)
del 클래스변수 -> 소멸시
(8) 생성자
- 생성자는 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메소드이다.
- 생성자는 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는 데 필요한 설정이 필요한 경우 사용한다.
- 자바에서는 클래스 명과 동일한 메소드명을 가지고, 반환 값이 없다.
- 파이썬에서는 __init__ 이라는 메소드명을 사용하고, 첫 번째 매개변수로 self를 적어주며, 반환 값이 없다.
▼ 자바에서 사용하는 생성자
public class 클래스명 {
public 클래스명(데이터_타입 변수명, ...) {
명령어;
}
}
▼파이썬에서 사용하는 생성자
class 클래스명 :
def __init__(self, 변수명, ...);
명령어
(9) 소멸자
- 소멸자는 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용되는 메소드이다.
- 자바에서는 finalize라는 메소드를 사용하며, 반환 값이 없다.
- 파이썬에서는 __del__이라는 메소드명을 사용하고, 첫 번째 매개변수에 self를 적어주며, 반환 값이 없다.
▼ 자바에서 사용하는 소멸자
public class 클래스명 {
public void finalize(매개변수) {
명령어;
}
}
▼ 파이썬에서 사용하는 소멸자
class 클래스명 :
def __del__(self) :
명령어
(10) 상속
- 상속은 어떤 객체가 있을 때 그 객체의 변수와 메소드를 다른 객체가 물려받는 기능이다.
- 자식 클래스를 생성하면 무조건 부모 클래스의 생성자를 실행한 후에 자식 클래스의 생성자를 실행한다.
▼ 자바 상속
class 부모_클래스명 {
}
class 자식_클래스명 extends 부모_클래스명 {
}
▼ 파이썬 상속
class 부모_클래스명 :
.......
class 자식_클래스명(부모_클래스명) :
........
1. 오버로딩
- 오버로딩은 동일 이름의 메소드를 매개변수만 다르게 하여 여러 개 정의할 수 있는 기능이다.
- 파이썬에서는 오버로딩 기능을 지원하지 않는다.
- 오버로딩 특징은 다음과 같다.
- 메소드 이름이 같아야 한다.
- 매개변수가 개수가 달라야 한다.
- 매개변수 개수가 같을 경우 데이터 타입이 달라야 한다.
- 반환형은 같거나 달라도 된다.
2. 오버라이딩
- 오버라이딩은 하위 클래스에서 상위 클래스 메소드를 재정의할 수 있는 기능이다.
- 오버라이딩 특징은 다음과 같다.
- 오버라이드하고자 하는 메소드가 상위 클래스에 존재하여야 한다.
- 메소드 이름은 같아야 한다.
- 메소드 매개변수 개수, 데이터 타입이 같아야 한다.
- 메소드 반환형이 같아야 한다.
▼ 자바 오버라이딩
class 부모_클래스명 {
public 반환_데이터_타입 메소드명(데이터_타입 변수명) {
.......
}
}
class 자식_클래스명 extends 부모_클래스명 {
public 반환_데이터_타입 메소드명(데이터_타입 변수명) {
//부모클래스의 메소드명, 매개변수가 동일해야 함
}
}
▼ 파이썬 오버라이딩
class 부모_클래스명
def 메소드명(self, 변수명)
class 자식_클래스명(부모_클래스명)
def 메소드명(self, 변수명)
#부모 클래스의 메소드명, 매개변수의 갯수가 동일해야 함
(11) 추상 클래스
- 추상 클래스는 미구현 추상 메소드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메소드를 반드시 구현하도록 강제하는 기능이다.
▼ 자바 추상 클래스
abstract class 클래스명 {
abstract 데이터_타입 메소드명( );
}
▼ 파이썬 추상 클래스
class 클래스명 :
def 메소드명(self) :
pass
(12) 인터페이스
- 인터페이스는 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법이다.
- 오직 추상 메소드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다.
- 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다.
▼자바 인터페이스
interface 클래스명 {
데이터_타입 메소드명( );
}
'정처기(필기) > 프로그래밍언어활용' 카테고리의 다른 글
기본문법 활용하기 - 4(표준 함수) (0) | 2022.09.01 |
---|---|
기본 문법 활용하기 - 1 (0) | 2022.08.31 |
기본 개발환경 구축 (0) | 2022.06.13 |
네트워크 기초 활용 (0) | 2022.06.12 |
프로세스 스케줄링 (0) | 2022.06.10 |