본문 바로가기
[JAVA]/JAVA 기본

[JAVA] 자바의 변수와 메서드(오버로딩)

by 황원용 2022. 9. 4.
728x90

필드(Field)

  • 클래스에 포함된 변수로, 객체의 속성을 정의할 때 사용한다.

 

 

자바의 변수

class javaVariable { // 클래스 영역
	static int b; // 클래스 변수(static 변수, 공유변수라고 함), 초기화 필요 없음
    	int a; // 인스턴스 변수, 강제 초기화가 되기 때문
	// 힙 메모리 영역에 저장, 객체가 존재하는 한 영구적

	void method() { // 메서드 영역
		int c = 0; // 지역 변수, {}블록 안에서만 유효함, 직접 초기화 필요
	// 스택 메모리 영역에 저장, 사용하지 않으면 자동 삭제
    }
}
  • 자바의 변수에는 클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 지역 변수(lv, local variable)가 있다.
  • 이 변수들은 선언 위치에 따라 맴버 변수와 지역 변수로 나뉜다.(전역 변수는 자바에 없다. 맴버 변수라고 부르자.)
  • 이 중 필드는 클래스 영역에 포함된 변수를 맴버 변수 or 필드라고 한다.
    • 맴버 변수에는 클래스 변수와 인스턴스  변수가 있다.
  • 메서드 영역에 있는 모든 변수를 지역 변수라고 한다.

 

 

인스턴스 변수

  • 인스턴스가 가지는 각각의 고유 속성을 독립된 저장 공간에 저장하며, 'new 생성자()'를 통해 만들어진다.

클래스 변수

  • 공통된 저장 공간을 공유하며, static 키워드를 통해 선언한다. 인스턴스 변수와는 달리 인스턴스를 따로 생성하지 않고, '클래스명.클래스변수명'으로 사용할 수 있다.

지역변수

  • 메서드 내에서만 사용 가능하며 멤버 변수와는 다르게 스택 메모리 영역에 저장된다.

 

💡 맴버 변수(필드)와 지역 변수의 차이점
 맴버 변수가 저장되는 힙 메모리 영역은 객체가 존재하는 한 절대 삭제되지 않는 반면에, 스택 메모리에 저장되는 지역 변수는 한동안 사용되지 않으면 가상 머신에 의해 자동으로 삭제된다. 필드 변수는 강제 초기화가 이루어져 직접 초기화할 필요가 없지만, 지역 변수는 반드시 직접 초기화를 해야 한다.

 

static 키워드

public class Main {
    public static void main(String[] args){
        ClassStatic instanceA = new ClassStatic(); //인스턴스(객체) 생성 
        System.out.println(instanceA.a); // 참조변수를 통해 불러온 인스턴스 변수
        System.out.println(ClassStatic.b);// static 키워드가 있는 클래스 변수
    }
}

class ClassStatic{
    int a = 10;
    static int b = 100;
    
    /*
    출력
    10 <- 인스턴스 변수
    100 <- 클래스 변수

 

정적 필드 간 값의 공유

public class Main {
    public static void main(String[] args){
        ClassStatic instanceA = new ClassStatic(); // 인스턴스(객체) 생성
        ClassStatic instanceB = new ClassStatic(); // 인스턴스(객체) 생성

        instanceA.a = 100; // A 객체의 a에 100을 넣음(10 -> 100)
        instanceB.a = 1000; // B 객체의 b에 1000을 넣음(10 -> 1000)
        System.out.println(instanceA.a); // 100
        System.out.println(instanceB.a); // 1000

        instanceA.b = 200; // 100 -> 200
        instanceB.b = 2000; //공유메모리를 사용하기 때문에 200 -> 2000
        System.out.println(instanceA.b); // 2000
        System.out.println(instanceB.b); // 2000, 모든 인스턴스에 공통의 값이 적용됨
    }
}

class ClassStatic{
    int a = 10; // 초기값
    static int b = 100; // 초기값
}

 

 

메서드(Method)

  • 특정 작업을 수행하기 위한 명령문들의 집합

 

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

// ex)
public void int example_add(int a, int b) { // void : 반환값이 없는 메서드
	int result = x + y; 
    Syetem.out.println(result);   
}

// 메서드 호출
void example_print(); // 인자가 없을 수도 있음
int example_add(1, 5); //

//메서드 호출 시 괄호 안에 넣는 입력 값을 인자라고 한다.
//인자의 개수와 순서는 정의된 메서드의 매개변수와 일치해야한다.

 

메서드 오버로딩(Method Overloading)

  •  하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의한다. 이로 얻을 수 있는 장점은 하나의 메서드로 여러 경우의 수를 해결할 수 있고, 비슷한 기능을 하지만 이름이 다른 여러 개의 메서드를 정의하여 코드의 가독성을 해치는 일을 방지할 수 있다.

 

조건 1) 같은 이름의 메서드명을 사용해야 한다.
조건 2) 매개변수의 개수나 타입이 달라야 한다.
728x90

'[JAVA] > JAVA 기본' 카테고리의 다른 글

[JAVA]내부 클래스  (0) 2022.09.05
[JAVA] 생성자  (0) 2022.09.05
[JAVA] 클래스와 객체  (0) 2022.09.02
[JAVA] 입출력  (0) 2022.08.30
[JAVA] 연산자  (1) 2022.08.30