클래스의 정의
- 클래스 == 데이터 + 함수
-
변수는 하나의 데이터만 저장할 수 있고, 배열은 같은 종류의 데이터만 저장할 수 있다.
-
그래서 구조체라는 서로 관련된 여러 데이터를 종류에 관계없이 하나로 저장할 수 있는 공간을 만들게 된다.
-
이런 구조체에 함수(메소드)를 결합시킨 것이 클래스다.
- 사용자 정의 타입 : 원하는 타입을 직접 만들 수 있다.
변수의 종류 (선언 위치에 따라)
- 클래스 영역 (인스턴스변수 = iv) instance variable
- 선언문만 가능. 클래스 영역에서 선언
- 생성시기 : 인스턴스가 생성되었을 때
- 객체 = iv를 묶어놓은 것이라고 말할 수 있다.
- cv와의 차이점 : 객체 생성 필요
- 개별 속성
- 클래스 변수 static iv (static 변수, 공유변수 = cv) class var
- 클래스 영역에서 선언
- 생성시기: 클래스가 메모리에 올라갈 때
- iv와의 차이점 : 객체 생성 불필요
- 공통 속성
1
2
3
4
5
6
7
8
9
10
11
12
13
class Card {
String pattern; //iv (개별적 속성이라서)
int number; //iv
static int width = 100; // cv(공통 속성이라서)
static int hight = 250; //cv
}
Card c = new Card(); //객체 생성
c.pattern = "HEART"; //객체 사용
c.number = 5; //객체 사용
Card.width = 200; //객체 사용 cv는 클래스 이름을 사용해야함 (권장사항)
Card.height = 300; //객체 사용
- 메소드 영역 (지역변수 = lv) local var
- 클래스 영역 이외의 영역에서 선언 (메소드 생성자, 초기화 블럭 내부)
- 생성시기: 변수 선언문이 수행되었을 때
- 메소드 종료시 자동 제거됨. 메소드 스코프 내에서만 사용.
메소드
- 문장들을 묶어놓은 것
- 값을 입력받아서 처리하고, 결과를 반환(출력)
- 장점 : 중복코드 제거, 관리가 용이함, 재사용이 가능함.
- 메소드 = 선언부 + 구현부
- 선언부 :
반환타입 메소드이름 (타입 변수명, 타입 변수명 ...)
- 구현부 : 메소드 호출시 수행될 코드
호출 스택 call stack
- 스택 : 밑이 막힌 상자. 위에 차곡차곡 쌓임
- 호출 스택 : 메소드 수행에 필요한 메모리가 제공되는 공간. 메소드가 호출되면 호출스택에 메모리를 할당했다가 종료되면 해제한다. 메인메소드는 스택 아래에 있으므로, 위에 있는 메소드가 실행될 때는 대기하다가, 메소드가 종료되면 호출스택에서 사라지므로 다시 메인 메소드가 실행된다.
기본형 매개변수
- 기본형 매개변수(8개 타입) : 변수의 값을 읽기만 할 수 있다. readonly
- 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다.
instance method
- 인스턴스 생성 후,
참조변수.메소드이름()
으로 호출 - 인스턴스 멤버(iv, im)과 관련된 작업을 하는 메소드
- 메소드 내에서 인스턴스 변수 iv 사용 가능
static method (클래스 메소드)
- 객체 생성 없이
클래스이름.메소드이름()
으로 호출 - 인스턴스 멤버(iv, im)과 관련없는 작업을 하는 메소드
- 메소드 내에서 인스턴스 변수 iv 사용 불가, 인스턴스 메소드 im도 사용 불가
- 이유 : static은 객체 생성 없이 호출 가능한데, iv또는 im은 객체 생성을 한 후에 호출가능하기 때문이다.
static을 언제 써야할까?
- 속성(멤버변수)중에서 공통 속성에 static을 붙인다.
- 인스턴스 멤버(iv, im)를 사용하지 않는 메소드에 static을 붙인다.
overloading : 한 클래스 안에 같은 이름의 메소드를 여러개 정의하는 것
오버로딩 성립조건
- 메소드 이름이 같아야 한다
- 매배변수의 개수 또는 타입이 달라야한다.
- 반환 타입에는 영향이 없다
매개변수는 다르지만 같은 의미의 기능을 수행한다.
생성자 constructor
- 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메소드
- 인스턴스 생성시 수행할 작업(iv 초기화)에 사용
- 이름이 클래스 이름과 같아야한다.
- void는 안 붙이지만 리턴값이 없다.
- 모든 클래스는 반드시 한 개 이상의 생성자를 가져야 한다.
기본 생성자 default constructor
- 매개변수가 없는 생성자
- 예)
Data_2() {}
가 Data_2 클래스 안에 있음. 습관적으로 꼭 넣어야함. - 생성자가 하나도 없을 때만 컴파일러가 자동 추가
생성자 this()
- 생성자에서 다른 생성자 호출할 때 사용
- 다른 생성자 호출시 첫 줄에서만 사용가능
- 코드의 중복을 제거하기 위함
참조변수 this
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메소드(생성자 포함)에서 사용 가능
- 지역변수 lv와 인스턴스 변수 iv를 구별할 때 사용
참조변수 this와 생성자 this()의 차이
this
- 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있다. 모든 인스턴스 메소드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수)
- 생성자. 같은 클래스의 다른 생성자를 호출할 때 사용한다.
멤버변수의 초기화 - static {}
- 명시적 초기화 (=)
- 초기화 블럭 - {}, static {}
- 생성자(iv초기화)