December 23, 2021
“실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.”
클래스 : 클래스란 객체를 정의해 놓은 것이다. 객체를 생성하는데 사용된다.
또다른 클래스의 정의
객체 : 실제로 존재하는 것, 사물 또는 개념. 객체가 가지고 있는 기능과 속성에 따라 다름
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 한다. 또한 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스 라고 부른다.
아래 예시처럼 new 명령어를 통해 인스턴스를 만들 수 있다.
클래스명 변수명 = new 클래스명();
class Variable{
int iv; // 인스턴스 변수
static int cv; // 클래스변수
void method(){
int lv = 0; // 지역변수
}
}
클래스 영역에 선언되며 클래스의 인스턴스를 생성할 때 만들어진다. 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
인스턴스 변수 앞에 static을 붙이면 된다. 클래스변수는 모든 인스턴스가 공통된 저장공간(변수)를 공유하게 된다.
className.classVariable
//인스턴스 변수와 구별을 주기 위해 일반적으로 다음과 같은 모습으로 사용한다.
메서드 내에 선언되며 사용된다. 메서드가 종료되면 소멸되어 사용할 수 없게 된다. 마찬가지로 for문 이나 while문 if문등 블럭 내에 선언된 지역변수는, 지역변수가 선언된 블럭{} 내에서만 사용 가능하며 블럭을 벗어나면 소멸된다.
c에서의 일반적인 함수와 선언방법 및 사용방법이 동일하다.
- 메서드가 호출되면 수행에 필요한 만큼에 멤모리 할당
- 메서드가 수행을 마치면 사용했던 메모리를 반환하고 스택에서 제거
- 호출 스택에 제일 위에 있는 메서드가 현재 실행 중 메서드
- 아래에 있는 메서드가 바로 위에 메서드를 호출한 메서드
기본형 매개변수 (1, 10, ‘c’ 등)
참조형 매개변수 (객체, 배열 등)
class example{
// 인스턴스 메서드
long a, b;
long add() { return this.a+this.b};
// static메서드
static long add(long a, long b){return a+b; }
}
한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 ‘메서드 오버로딩’ or 오버로딩(overloading) 이라고 한다.
class example{
int add(int a, int b) { return a+b;}
long add(long a, long b) {return a+b; }
}
class example{
int test(int a, String... str){
// str은 배열로서 사용할 수 있게된다.
}
}
test(1, "a", "b", "c") // test함수에서 str은 [a][b][c] 가 된다.
test(1, "a", "b") // test함수에서 str은 [a][b] 가 된다.
즉 가변인자는 추가적인 parameter들을 array로 변환시켜주는 것이다.
생성자는 인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’ 이다.
1. 생성자의 이름은 클래스의 이름과 같아야 한다.
2. 생성자는 리턴 값이 없다.