[0718] 자바 객체지향프로그래밍 2 (필드와 메서드)
#필드
:'클래스에 포함된 변수'를 의미. 객체의 속성을 정의할 때 사용된다.
-변수의 종류
선언 위치 | 이름 | static 사용 | 사용메모리 | 초기화 |
클래스 영역 | 클래스 변수 (cv, class variable) |
O | 메서드 | 자동초기화 |
인스턴스 변수 (iv, instance variable) |
X | 힙 | ||
메서드 영역 | 지역 변수 (lv, local variable) |
O | 스택 | 초기화 없이 사용시 오류. |
(1)클래스 변수
: 공통저장공간 공유.(= 메서드 영역 메모리 사용)
static 키워드를 사용하여 모든 인스턴스에서 공유하는 값으로 사용된다.
(2)인스턴스 변수
: 인스턴스의 각각의 고유한 속성을 저장하기 위한 변수.
(3)지역 변수
: 메서드 내 선언. 메서드 내에서만 사용 가능.
#static
: 클래스의 멤버에 사용한다.
static이 붙은 멤버를 정적 멤버라고 한다.
사용은 클래스명.멤버명의 형태로 사용한다.
-정적 멤버는 객체 간 공유된다.
-정적 메서드는 인스턴스 변수와 인스턴스 메서드를 사용할 수 없다.
#메서드
: 특정 작업을 수행하는 일련의 명령문들의 집합.
클래스의 기능을 담당.
-구조
(1) 메서드 시그니처
: 반환 타입, 메서드명, 매개 변수에 대한 정보
*void: 반환 값이 없는 메서드(void가 아닌 경우 메서드 바디에 반드시 return문이 필요하다)
(2) 메서드 바디
: 메서드 호출 시 실행되는 코드(작업)
//기본 구조
자바제어자 반환타입 메서드명(매개 변수) {
메서드 내용
}
public static int plus(int a, int b) { // 메서드 시그니처
int result = a + b; // 메서드 바디
return result;
}
#메서드의 호출
: 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야 한다.
위 코드에 있는 메서드를 호출한 코드는 다음과 같다.
plus(5, 10);
//출력값: 15
- 괄호()안에 넣어주는 값을 인자라고 부른다.
- 인자의 개수와 순서는 메서드의 시그니쳐의 매개변수와 일치되어야 한다.
#메서드 오버로딩
: 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것을 의미한다.
public class ExampleofOverloading {
public statc void main(String[] args) {
Speed s = new Speed(); // 객체(인스턴스) 생성
s.(50); // 메서드 호출
s.(200, 100);
s.(170.0, 1.6);
}
}
class Speed {
public void distance(int 거리) { // 같은 이름의 메서드 3개로 메서드 오버로딩
System.out.println("남은 거리 = " + 거리);
}
public void distance(int 거리, int 속도) {
System.out.println("남은 시간 = " + 거리 / 속도)
}
public void distance(double 거리, double 시간) {
System.out.println("평균 속도 = " + 거리 / 시간)
}
}
// 출력값
남은 거리 = 50
남은 시간 = 2
평균 속도 = 106.25
- 오버로딩의 조건
(1) 같은 이름의 메서드명.
(2) 매개변수의 개수나 타입이 다르게 정의.
*오버로딩은 하나의 메서드로 여러 작업을 수행할 수 있다. (인스턴스 생성을 1번만 해도 됨)