개발지/Today I learn

[0718] 자바 객체지향프로그래밍 2 (필드와 메서드)

개발지의 개발자 2023. 7. 19. 03:02

#필드

:'클래스에 포함된 변수'를 의미. 객체의 속성을 정의할 때 사용된다.

-변수의 종류

선언 위치 이름 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번만 해도 됨)