본문 바로가기

Study/Java

[Java] 변수와 메소드

변수와 메소드

변수의 종류

  1. 클래스 변수
    • 클래스가 메모리에 올라갔을 때 생성
    • 모든 인스턴스가 공통된 저장공간(변수)를 공유
    • 인스턴스 변수 앞에 static을 붙이면 OK ⇒ static int width = 100;
  2. 인스턴스 변수
    • 인스턴스 생성 시 생성
    • 인스턴스마다 다른 값을 가지는 경우
  3. 지역 변수
    • 클래스 이외의 영역 (메소드, 생성자)
    • 변수 선언문 수행 시 생성

메소드 선언과 구현

반환타입 이름(파라미터) { 
    ... //메소드 구현부 
    return -1 // 반환 값은 최대 1개 
} 
int add(int x, int y) { 
    int result = x + y; 
    return result; 
}

반환 값이 없는 경우?

  • 반환 타입으로 void를 주면 된다.

JVM의 메모리 구조

JVM은 프로그램 수행에 필요한 메모리를 할당받고, 할당 받은 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

  • 메소드 영역: 클래스에 대한 정보 (클래스 변수는 이 영역에 생성된다)
  • 호출 스택(call stack): 메소드 작업 수행 시간 동안 지역변수연산의 중간 결과 등을 저장
  • 힙: 인스턴스 생성

기본형 변수와 참조형 변수

  • 기본형: 값 자체를 복사하는 것
  • 참조형: 값이 담긴 주소를 갖고 있어 값의 변경이 가능

클래스 메소드와 인스턴스 메소드의 차이

  • 클래스 메소드 (static)
    • 인스턴스 변수를 사용하지 않는(관계 없는) 경우 일반적으로 클래스 메소드로 선언한다.
    • 클래스 메소드는 인스턴스 변수를 사용할 수 없다.
    • 인스턴스는 클래스를 생성해야 사용할 수 있다는 점으로 미루어 볼때, 클래스 메소드 내부에서 인스턴스 변수나 메소드는 사용할 수 없다는 것을 알 수 있다.
  • 인스턴스 메소드
    • 인스턴스 변수를 사용하는 경우 인스턴스 메소드로 선언한다.
class Data { 
    int x; 
    static int y;
    static void method() { 
    	System.out.println(x); // 에러: 클래스 메소드에서 인스턴스 변수를 사용함 
        System.out.println(y); // OK 
    }
}

 

'Study > Java' 카테고리의 다른 글

[Java] 변수의 초기화  (0) 2020.03.10
[Java] 생성자와 this  (0) 2020.03.10
[Java] 오버로딩  (0) 2020.03.10
[Java] 클래스와 객체  (0) 2020.03.10