Java | 변수와 메서드

나경호·2022년 6월 4일

CS | Java

목록 보기
6/9
post-thumbnail

변수와 메서드

선언위치에 따른 변수의 종류

변수는 ‘변수의 선언된 위치’에 따라 클래스변수, 인스턴스변수, 지역변수로 총 세가지이다. 멤버변수(메서드 밖에서 선언된 변수)를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스변수이다.

class Variables{
   int iv;                  // 인스턴스변수
  static int cv;           // 클래스변수

  void method(){
    int lv = 0;            // 지역변수
  }
}

인스턴스변수(instance variable)

클래스 영역에 선언, 클래스의 인스턴스를 생성할 때 생성된다.
떄문에 인스턴스를 먼저 생성해야 인스턴스 변수의 값을 읽거나 저장할 수 있다.

  • 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
  • 인스턴스마다 고유한 상태로 유지해야하는 속성의 경우 인스턴스변수로 선언한다.(static X)

클래스변수(class variable)

클래스변수는 인스턴스변수 앞에 static을 붙이기만 하면 된다.

  • 클래스변수는 인스턴스변수와 달리 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다.
  • 한 클래스의 모든 인스턴스들이 공통된 값을 유지해야하는 속성의 경우 클래스변수로 선언한다.(static O)
  • 클래스 변수는 인스턴스를 생성하지 않고도 언제든지 바로 사용할 수 있다. (ex. Variables.cv -> 클래스이름.클래스변수)
  • 클래스가 메모리에 ‘로딩(loading)’될 때 생성되어 프로그램이 종료될 때까지 유지도며, public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 ‘전역변수(global variable)’의 성격을 가진다.

인스턴스변수는 인스턴스가 생성될 떄마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 가진다.

지역변수(local variable)

메서드 내에 선언, 메서드 내에서만 사용가능하며, 메서드가 종료되면 사용할 수 없다.

  • for문 또는 while문의 블럭 내에 선언된 지역변수는 지역변수가 선언된 블럭{} 내에서만 사용 가능하다.

메서드(method)

‘메서드(method)’는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.

메서드를 사용하는 대표적인 이유 세가지

1. 높은 재사용성(reusability)

이미 Java API(Application Programming Interface)에서 제공하는 메서드들(println 등)을 사용하면서 경험했듯이, 한번 만들어 놓은 메서드는 몇 번이고 호출할 수 있으며, 다른 프로그램에서도 사용이 가능하다.

2. 중복된 코드 제거

반복되는 문장들을 묶어서 하나의 메서드로 작성해 놓으면, 반복되는 문장들 대신 메서드를 호출하는 한 문장으로 대체할 수 있다.
이는 전체 소스 코드의 길이에 영향을 주어 변경사항이 발생했을 때 수정해야할 코드의 양이 줄어들어 오류 발생 가능성도 줄일 수 있다.

3. 프로그램의 구조화

static int showMenu() { /* 나중에 내용 완성 */ }
static void inputRecord() { /* 나중에 내용 완성 */ }
static void changeRecord() { /* 나중에 내용 완성 */ }
static void deleteRecord() { /* 나중에 내용 완성 */ }
static void searchRecord() { /* 나중에 내용 완성 */ }
static void showRecordList() { /* 나중에 내용 완성 */ }

public static void main (String args[]) {switch(showMenu()) {
    case 1: inputRecord();
    case 2: changeRecord();
    case 3: deleteRecord();
    case 4: searchRecord();
    default: showRecordList();
  }
}

Reference

  • Java의 정석-남궁 성 지음
profile
기억창고👩‍🌾

0개의 댓글