수제비 2022 정보처리기사 실기 수험서를 보고 공부한 기록입니다.
- 클래스는 객체 지향 프로그래밍(OOP; Object-Oriented Programmin)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 틀이다
- C 언어는 명령형 프로그래밍으로 클래스를 지원하지 않는다
👉접근 제어자(Access Modifier)
접근 제어자는 지정된 클래스, 변수, 메서드를 외부(같은 패키지이거나 다른 패키지)에서 접근할 수 있도록 권한을 설정하는 기능이다
▼ 접근 제어자 종류
- public
- 외부의 모든 클래스에서 접근이 가능한 접근 제어자
- protected
- 같은 패키지 내부에 있는 클래스, 하위 클래스(상속받은 경우)에서 접근이 가능한 접근 제어자
- 자기 자신과 상속받은 하위 클래스 둘 다 접근이 가능한 접근 제어자
- default
- 접근 제어자를 명시하지 않은 경우로 같은 패키지 내부에 있는 클래스에서 접근이 가능한 접근 제어자
- 자바에만 존재하는 접근 제어자
- private
- 같은 클래스 내에서만 접근이 가능한 접근 제어자
👉클래스 사용
1. 클래스 정의
- 클래스는 변수와 메서드(함수) 형태로 구성되어 있다
- 클래스에서 변수는 변수 선언과 동일하고, 메서드는 사용자 정의함수와 문법이 동일하다
- 파이썬은 별도로 변수 선언을 하지 않기 때문에 메서드 형태로 구성되어 있다
▼ 자바 클래스 정의
public class 클래스명{
private 변수_타입 변수명;
public 반환_데이터_타입 메서드명(데이터_타입 변수명, ...){
명령어;
return 반환값;
}
}
▼ 파이썬 클래스 정의
class 클래스명:
def 메서드명(self, 변수명, ...):
명령어
return 반환값
- 파이썬에서는 함수명에 입력받을 값(매개변수) 앞에 self라는 키워드를 적어야 한다
2. 자신 클래스 참조
① this 포인터
- this 포인터는 현재 객체를 가리키는 포인터이다
- 자바에서 사용하는 것으로 클래스 내부의 변수와 함수를 가리킬 수 있다
this.변수;
this.함수(매개변수);
② self
- self는 현재 객체를 가리키는 포인터이다
- 파이썬에서 사용하는 것으로 클래스 내부의 변수와 함수를 가리킬 수 있다
self.변수명;
self.함수명(매개변수);
3. static 메서드
- 클래스가 메모리에 올라갈 때 자동적으로 생성되는 메서드이다
- 인스턴스를 생성하지 않아도 호출이 가능하게 된다
4. 클래스 선언
- 클래스를 일반변수로 선언한 경우 선언함과 동시에 생성자가 호출되고, 일반변수로 선언한 곳에서 함수가 종료되면 소멸자가 호출된다
▼ 자바 클래스 선언
클래스 클래스변수=new 클래스(매개변수);
클래스변수.finalize();
▼ 파이썬 클래스 선언
클래스변수=클래스(매개변수)
del 클래스변수
👉생성자(Constructor)
- 생성자는 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드이다
- 생성자는 일반적으로 클래스의 멤버 변수를 초기화하거나 클래스를 사용하는 데 필요한 설정이 필요한 경우 사용한다
- 자바에서는 클래스 명과 동일한 메서드명을 가지고, 반환 값이 없다
- 파이썬에서는 __init__ 이라는 메서드명을 사용하고, 첫 번째 매개변수로 self를 적어주며, 반환 값이 없다
▼ 자바에서 사용하는 생성자
public class 클래스명{
public 클래스명(데이터_타입 변수명, ...){
명령어;
}
}
▼파이썬에서 사용하는 생성자
class 클래스명:
def __init__(self, 변수명, ...):
명령어
👉소멸자(Destructor)
- 소멸자는 객체의 수명이 끝났을 때 객체를 제거하기 위한 목적으로 사용되는 메서드이다
- 자바에서는 finalize라는 메서드를 사용하며, 반환 값이 없다
- 파이썬에서는 __del__이라는 메서드명을 사용하고, 첫 번째 매개변수에 self를 적어주며, 반환 값이 없다
▼ 자바에서 사용하는 소멸자
public class 클래스명{
public void finalize(매개변수){
명령어;
}
}
▼ 파이썬에서 사용하는 소멸자
class 클래스명:
def __del__(self):
명령어
👉상속(Inheritance)
- 상속은 어떤 객체가 있을 때 그 객체의 변수와 메서드를 다른 객체가 물려받는 기능이다
- 자식 클래스를 생성하면 무조건 부모 클래스의 생성자를 실행한 후에 자식 클래스의 생성자를 실행한다
▼ 자바 상속
class 부모_클래스명{
}
class 자식_클래스명 extends 부모_클래스명{
}
▼ 파이썬 상속
class 부모_클래스명:
...
class 자식_클래스명(부모_클래스명):
...
1. 오버로딩(Overloading)
- 오버로딩은 동일 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의할 수 있는 기능이다
- 파이썬에서는 오버로딩 기능을 지원하지 않는다
- 오버로딩 특징은 다음과 같다
- 메서드 이름이 같아야 한다
- 매개변수 개수가 달라야 한다
- 매개변수 개수가 같을 경우 데이터 타입이 달라야 한다
- 반환형은 같거나 달라도 된다
2. 오버라이딩(Overriding)
- 오버라이딩은 하위 클래스에서 상위 클래스 메서드를 재정의할 수 있는 기능이다
- 오버라이딩 특징은 다음과 같다
- 오버라이드하고자 하는 메서드가 상위 클래스에 존재하여야 한다
- 메서드 이름은 같아야 한다
- 메서드 매개변수 개수, 데이터 타입이 같아야 한다
- 메서드 반환형이 같아야 한다
▼ 자바 오버라이딩
class 부모_클래스명{
public 반환_데이터_타입 메서드명(데이터_타입 변수명){
}
}
class 자식_클래스명 extends 부모_클래스명{
public 반환_데이터_타입 메서드명(데이터_타입 변수명){
}
}
▼ 파이썬 오버라이딩
class 부모_클래스명
def 메서드명(self, 변수명):
class 자식_클래스명(부모_클래스명)
def 메서드명(self, 변수명):
3. 상위 클래스 접근
자바와 파이썬은 super 키워드를 이용하여 상위 클래스의 변수나 메서드에 접근할 수 있다
▼ 자바 상위 클래스 접근
super.메서드명()
▼ 파이썬 상위 클래스 접근
super().메서드명()
👉추상 클래스
추상 클래스는 미구현 추상 메서드를 한 개 이상 가지며, 자식 클래스에서 해당 추상 메서드를 반드시 구현하도록 강제하는 기능이다
▼ 자바 추상 클래스
abstract class 클래스명{
abstract 데이터_타입 메서드명();
}
▼ 파이썬 추상 클래스
class 클래스명:
def 메서드명(self):
pass
👉인터페이스
- 인터페이스는 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법이다.(인터페이스는 일종의 추상 클래스이다)
- 오직 추상 메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다
- 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다
▼ 자바 인터페이스
interface 클래스명{
데이터_타입 메서드명();
}