개발 공부/JAVA

[Java] 선언 위치에 따른 변수 종류, 메서드 호출 및 실행

YeEun2 2022. 2. 3. 17:52
반응형

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

변수의 종류에는 클래스 변수, 인스턴스 변수, 지역변수가 있다.

이 종류를 결정짓는 중요한 요소는 '변수의 선언 위치'이다. 

따라서 종류를 파악하기 위해서는 변수가 어느 영역에 선언되었는지를 확인하는 것이 중요하다.  

 

영역은 크게 클래스 영역과 메서드 영역으로 나뉜다. 

class Variables   

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

  void method()
  { 
    int lv = 0;   // 지역변수
  } //메서드 영역 end
} //클래스 영역 end
 클래스 영역

- 선언(메서드, 변수 선언)만 가능하며 출력이나 연산은 할 수 없다. 

- 인스턴스 변수, 클래스 변수

 

 메서드 영역

- 메서드 선언과 정의

- 지역변수 

 

 변수의 종류

1. 인스턴스 변수 (instance variable)

- 클래스 영역에 선언되며 인스턴스를 생성할 때 만들어진다. 

- 인스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다. (개별속성)

 

2. 클래스 변수(class variable)

- 클래스 변수는 클래스가 메모리에 올라갈 때 자동으로 생성되어, 객체를 생성하지 않아도 된다.

- 모든 인스턴스가 공통된 저장공간(변수)을 공유한다. (공통 속성)

 

3. 지역변수(local variable)

- 메서드 영역에서 사용가능하다. 
- 범위(scope)는 메소드메서드 시작~끝이며, 메서드 종료되면 자동으로 제거된다. 

 

#메서드

메서드란 특정 작업을 수행하는 문장들을 하나로 묶어 놓은 것이다. 

함수의 개념과 유사하며 어떤 값을 입력받아 처리하고 결과를 출력한다. 

 

메서드 사용시 장점

- 코드의 중복을 줄일 수 있다.

- 코드를 한 메서드에서 관리하여 관리가 쉽다. 

- 코드를 재사용 할 수 있다. 

- 코드를 작업단위로 묶었기 때문에 코드가 간결해서 이해하기가 쉽다. 

 

메서드 작성

-  반복적으로 수행되는 여러 문장을 메서드로 작성.

→ 반복적이지 않아도 여러 문장으로 구성된 코드를 하나의 메서드로 만들어 놓으면 코드가 간결해진다. (그럼 이해하기 쉽겠죠?)

 

- 하나의 메서드는 한 가지 기능만 수행하도록 작성.

→ 예를 들어 하나의 메서드에는 덧셈 기능과 뺄셈 기능을 모두 넣을 수 없음으로 한 기능씩 각각 만들어야 한다. 

 

메서드의 구성

메서드는 선언부와 구현부로 구성되어있다.

선언부는 '메서드의 이름'과 '매개변수 선언', 그리고 '반환 타입'으로 구성되어 있다. 

메서드가 작업을 수행하기위해 어떤 값을 입력받고 작업의 결과로 어떤 타입의 값을 반환하는지에 대한 정보를 제공한다.

 

▶ 매개변수 선언

매개변수는 작업에 필요한 값들을 입력받기 위해 필요한 것으로 입력의 개수는 0~n개다. 

 

▶ 반환타입

메서드가 작업한 작업 결과의 타입을 적는 부분이다.

반환 값이 없을 시에는 반환 타입으로 'void'를 적으면 된다. 

 

구현부는 메서드가 작업을 수행하는 코드로 메서드 영역  괄호{} 안의 문장들을 수행하는 부분이다. 

출력 값은 0~1개이며, 2개 이상이면 안된다. 만약 작업 결과가 여러 개 일시에는 배열을 이용하거나 하나의 객체로 묶어야 한다. 

 

#메서드 호출 및 실행 흐름

메서드 정의 후 호출을 하지 않으면 아무 일도 일어나지 않기 때문에, 메서드를 호출해야 구현부{}의 문장들이 수행된다.

 

예제) 클래스에 선언된 메서드 호출

public class Ex6_4 {

	public static void main(String[] args) {
		MyMath mm = new MyMath();

		long result1 = mm.add(5, 3); 
		long result2 = mm.subtract(5, 3);
		long result3 = mm.multiply(5, 3);
		double result4 = mm.divide(5, 3);
		
		System.out.println("add((5, 3) = " + result1);
		System.out.println("subtract(5, 3)= " + result2);
		System.out.println("multiply(5, 3) = " + result3);
		System.out.println("divide(5, 3) = " + result4);
	}
}

class MyMath{
	long add(long a, long b) {
		return a +b;
//		long result = a + b;
//		return result;
	}

	long subtract(long a, long b) {return a - b;}
	long multiply(long a, long b) {return a * b;}
	double divide(double a, double b ) {
		return a /b;
	}
}

 

MyMath클래스에서 add메서드를 실행하는 흐름에 대해서 살펴보겠다. 

 

add 메서드 호출하기 위해서는 'MyMath mm = new MyMath();'와 같은 객체를 생성한다. 

그리고  'long result1 =  mm.add(5,3);'을 통해서 add 메서드를 호출한다.

여기서 괄호() 안에 지정된 값을 인자라고 하는데 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다.

그리고 인수는 메서드가 호출되면 매개변수에 대입되므로 인자의 타입은 매개변수의 타입과 일치해야 하며 자동 형 변환이 가능한 것이어야 한다. 

 

뎃셈 메서드를 호출하면  add 메서드의 매개변수 안에 인자 값이 대입되고, 괄호{} 안의 문장들이 순서대로 작업을 수행한다. 

 작업이 끝나면 'return문'을 통해 호출한 곳으로 다시 돌아와 'result1'에 값을 저장하고, 'result1'에 저장된 값이 출력된다.  

 

* 출력 결과 (add메서드)

add((5, 3) = 8

반응형