Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

랩터

[Java] 필드와 메서드 본문

공부/JAVA

[Java] 필드와 메서드

raptorhs 2024. 6. 26. 15:34

필드(Field)

필드는 ‘클래스에 포함된 변수'를 의미하는 것으로 객체의 속성을 정의할 때 사용됩니다.

 

자바에서 변수는 크게 클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 그리고 지역 변수(lv, local variable)라는 세 가지로 구분될 수 있습니다.

 

이 중 우리가 필드라 부른 것은 클래스 변수와 인스턴스 변수이며, 이 둘은 다시 static 키워드의 유무로 구분할 수 있습니다.

 

static키워드가 함께 선언된 것은 클래스 변수, 그렇지 않은 것은 인스턴스 변수입니다. 그리고 이 두가지 변수 유형에 포함되지 않고 메서드 내에 포함된 변수를 지역변수라 부릅니다.

class Example { // => 클래스 영역
	int instanceVariable; // 인스턴스 변수
	static int classVariable; // 클래스 변수(static 변수, 공유변수)

	void method() { // => 메서드 영역
		int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
	}
}

인스턴스 변수는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될 때 만들어진다.

 

클래스변수는 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유합니다. 한 클래스로부터 생성되는 모든 인스턴스가 이 특정한 값을 공유해야 하는 경우에 주로 static 키워드를 사용하여 클래스 변수를 선언하게 됩니다. 또한 클래스 변수는 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명 을 통해 사용이 가능합니다. 

 

 

지역변수는 매서드 내에 선언되며 매서드 내{}블록 에서만 사용가능한 변수입니다. 지역변수는 스택 메모리에 저장되어 메서드가 종료되는것과 동시에 함께 소멸되어 더이상 사용할 수 없게 됩니다.

 

필드 변수와 지역변수의 주요한 한가지 차이점은 초기값에 있습니다. 직접 초기화하지않으면 값을 출력할 때에 오류가 발생하는 지역변수와는 다르게 필드 변수는 초기화를 실행하지 않더라도 강제로 초기화가 이뤄집니다.

 

static 키워드

static은 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드입니다.

static 키워드가 붙어있는 멤버를 우리는 정적 멤버(static member)라고 부르고 static이 붙어있지 않은 인스턴스 변수와 구분합니다. 

이 둘을 구분하는 가장 큰 차이는 인스턴스 멤버는 기존에 우리가 배웠던 내용처럼 반드시 객체를 생성한 이후에 변수와 메서드에 접근하여 해당 멤버를 사용가능한 반면, static 키워드로 정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명 만으로도 사용이 가능하다는 점입니다.

 

public class StaticTest {
    public static void main(String[] args) {
        StaticExample staticExample = new StaticExample();
        System.out.println("인스턴스 변수: " + staticExample.num1); // static 키워드가 없는 인스턴스 변수
        System.out.println("클래스 변수: " + StaticExample.num2); //static 키워드가 있는 클래스 변수
    }
}

class StaticExample {
    int num1 = 10;
    static int num2 = -10;
}

//출력값
인스턴스 변수: 10
클래스 변수: -10

 

위 코드를 통해 static 키워드의 유무에 따라 달라지는 차이를 명확하게 확인해볼수 있습니다.

 

여기서 기억해야할 두가지.

 

1.정적 필드는 객체 간 공유 변수의 성질이 있다

이것은 메서드에도 동일하게 적용됩니다. 메서드 앞에 static키워드 사용하면 해당 메서드는 정적 메서드가 됩니다. 정적 메서드도 정적 필드와 마찬가지로 클래스명만으로 바로 접근 가능합니다.

 

2.정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사용할수 없다.

정적 메서드는 인스턴스 생성 없이 호출이 가능하기 때문에 정적 메서드가 호출되었을때 인스턴스가 존재하지 않을 수 있기 때문입니다.

 

메서드(Method)

메서드는 특정 작업을 수행하는 일련의 명령문들의 집합을 의미합니다. 메서드는 머리에 해당하는 메서드 시그니처와 몸통에 해당하는 메서드 바디로 구분할 수 있습니다.

자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처
	메서드 내용 // 메서드 바디
}

메서드의 반환타입이 void가 아닌 경우에는 메서드 바디({}) 안에 반드시 return 문이 존재해야 합니다. 리턴문은 작업을 수행한 결과값을 호출한 메서드로 전달합니다. 여기서 결과값은 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 합니다.

 

메서드의 호출

메서드를 아무리 잘 정의하더라도 실제로 호출되지 않으면 너무 당연하게도 아무 일도 일어나지 않습니다.

메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야 합니다. 인스턴스를 생성한 후에 앞서 보았던 것처럼 포인트 연산자(.)를 통해 메서드를 호출할 수 있습니다.

반면, 클래스 내부에 있는 메서드끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있습니다.

 

메서드 오버로딩(Method Overloading)

메서드 오버로딩이란 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것을 의미합니다.

오버로딩의 조건을 정리하면 다음과 같습니다.

  • 메서드를 오버로딩하려면
    • 메서드의 이름이 같아야 합니다.
    • 매개변수의 개수 또는 타입이 달라야 합니다.

메서드 오버로딩의 장점은 하나의 메서드로 여러 경우의 수를 해결할 수 있다는 것입니다.

'공부 > JAVA' 카테고리의 다른 글

[Java] 상속(Inheritance)  (0) 2024.06.28
[Java] 내부 클래스  (0) 2024.06.26
[Java]생성자  (0) 2024.06.26
[Java] 기본형과 참조형  (0) 2024.06.25
[Java] 클래스,객체  (0) 2024.06.24