본문 바로가기
Java

자바 중급 007. 클래스 변수 와 인스턴스 변수 , 지역변수(로컬변수 :local variable) -클래스 내 메서드 선언과 생성, 적용하는 방법

by Smart Factory in 2020 2021. 8. 14.
728x90
반응형

안녕하세요. 스마트팩토리입니다. 
자바 중급 007. 클래스 변수 와 인스턴스 변수 , 지역변수(로컬변수 :local variable) -클래스 내 메서드 선언과 생성, 적용하는 방법에 대해 알아보겠습니다. 

1.메서드와 지역변수 

가. 지역변수 

(1) 지역변수( 로컬변수 : local variable)
-메서드 내에서 선언
-메서드 종료와 함께 메모리에서 사라짐
-메서드 또는 조건문, 반복문 {  } 내에서 선언된 변수는 { }(블럭)을 벗어나면 메모리에서 사라짐

일반 클래스( Opera1.java)와실행 클래스( Opera1Ex.java)를 만들어 보겠습니다. 

<<  Opera1.java 클래스 >>

Opera1 클래스 에서 클래스 변수와 인스턴스 변수가 있는 것을 볼 수 있습니다.

물론 클래스 변수에서는 직접 값을 입력할 수 있지만 변수만 선언하는 것으로 했습니다. 자동으로 0으로 초기화 됩니다. 물론 실행 클래스에서 값 변경은 가능합니다. 

인스턴스 변수는 실행 클래스에서 new 연산자를 활용하여 선언하고 변수값을 넣어줘야 생성이 됩니다. new 연산자는 참조 연산자 이기 때문에 인스턴스 변수의 저장공간에 대한 주소값을 먼저 생성하고 이후에 변수 값을 넣어주면 heap 메모리에 실제값을 생성합니다. 

 즉 클래스 변수는 일반 클래스에서 선언을 하면 자동 초기화가 되지만 인스턴스 변수는 일반 클래스에서 자동 생성이 되지 않고 실행 클래스에서 new 연산자로 선언을 해야하고 값을 넣어야 생성이 됩니다. 

클래스에 인스턴스 메서드가 있습니다. public으로 붙어 있으므로 이는 접근 제어자로 다음에 다시 설명하기로 하겠습니다.  메서드는 기능즉 명령문입니다. 

public int add(int x, int y) {  --> 인스턴스 메서드 
    
 public float add(float x, float y) { --> 인스턴스 메서드 

메서드 안에도 변수가 있는데 이를 로컬변수라고 합니다. 이는 메서드 안에서만 작동을 하고 이후에 메서드를 벗어나면 사라집니다.  클래스 변수나 인스턴스 변수가 생성되는 영역과 지역변수가 생성되는 위치가 다릅니다. 보기에는 동일해 보이지만~~ 차이가 있다는 것을 아는 것이 포인트입니다. 

 int addR=x+y; --> 로컬변수 
 float addR=x+y;  --> 로컬변수 

지역변수는 메서드 영역뿐만 아니라 이후에 포스팅할 생성자, 초기화 블럭 내부 등에서도 선언할 수 있습니다.

package cOper;

public class Opera1 {
  static int fnum;  --> 클래스 변수 
  int snum;  --> 인스턴스 변수 
  
  static float fnum2;  ---> 클래스 변수 
  float snum2; --> 인스턴스 변수 
  
  public int add(int x, int y) {  --> 인스턴스 메서드 
  int addR=x+y; --> 로컬변수 
  return addR;
  }
   
 public float add(float x, float y) { --> 인스턴스 메서드 
  float addR=x+y;  --> 로컬변수 
  System.out.println("두 수의 합은"+addR);
  return addR;
  }  
}

<<  Opera1EX.java 실행클래스 >>

new 연산자를 활용하여 mm1 과  mm2 선언하였습니다. 실행 클래스에서도 더하기 역할을 하는 두개의 메서드를 적용하는 방법입니다. 메서드 이야기는 또 해야 하기 때문에 이번 시간에는 메서드를 활용하여 코드를 간단하게 하려면 어떻게 하는지 아는게 핵심입니다. 

Opera1 mm1=new Opera1();
mm1.snum=3;
Opera1.fnum=9;
int result= mm1.add(mm1.snum,Opera1.fnum);
System.out.println("두 수의 합은 : "+result );

직접 클래스 변수와 인스턴스 변수를 생성하여 출력하기 위해서 명령문을 작성하였습니다. 

메서드를 활용하지 않고 더하기를 한다면 다음에 연산을 위해서 다시 코드를 작성해야 하는 번거로움이 있습니다. 반복작업을 위해서 수치만 변경하면되는 것을 하나씩 넣으려면 상당히 비효율적인 것을 알 수 있습니다. 쓰다가 철자라도 틀린다면 에러를 발생시킬 것입니다. 

Opera1 mm2=new Opera1();
mm2.add(3.0f,9.0f);

메서드를 활용하여 출력값을 바로 보도록 하였습니다. 

int add 메서드와 float add 메서드는 기능은 동일하지만 출력문이 있느냐 없느냐 차이입니다. 실행문에서 어차피 반복해야 나온다면 클래스에서 메서드에서 한번 작성해서 활용하면 훨씬 수월하다는 것을 알 수 있습니다. 

package cOper;

public class Opera1Ex {

public static void main(String[] args) {

Opera1 mm1=new Opera1();
    
mm1.snum=3;
Opera1.fnum=9;
int result= mm1.add(mm1.snum,Opera1.fnum);--> int add 메서드 적용
System.out.println("두 수의 합은 : "+result );


Opera1 mm2=new Opera1();-
mm2.add(3.0f,9.0f);--> float add 메서드 적용

}

}

클래스 변수, 인스턴스 변수, 지역변수와 메서드에 대해 알아보았습니다. 비슷한 내용과 헷갈리는 부분이 있습니다. 저도 이 부분이 가장 이해하기 힘든 부분이 아닌가 싶습니다. 앞으로 더 올라올 객체와 클래스 관련하여 내용이 상당히 많습니다. 부분적으로 조금씩 이해하다보면 어느 순간 이해한 부분들이 연결고리를 형성하여 코드를 보는 눈이 생깁니다. 하나하나씩 헷갈리는 부분을 명확히 이해하는 것이 중요하다 하겠습니다. 

 

728x90
반응형

댓글