Dreaming Dean
Hello, I'm Studying
  • Secure
  • Java
  • Oracle
  • +others
Coding.
I AM STUDYING PROGRAMING LANGUAGE. IF YOU WANT TO SEE MY WORK THE PROGRAMMING PROJECT, CHECK IT OUT MY BLOG AND GITHUB.

Variable and Method 변수와 메소드

Dean92
2017. 4. 3. 18:51

변수의 종류

변수의 종류에는 클래스변수, 인스턴스변수, 지역변수가 있다. 변수를 구분하는 방법은 변수가 선언된 위치를 확인하는 것이다.


멤버변수를 제외한 변수들은 모두 지역변수이고 static이 앞에 선언된 것은 클래스변수, 붙지 않은 것은 인스턴스변수이다.


변수종류 선언하는 위치 생성되는 시기
클래스변수
Class Variable
클래스 영역 클래스가 메모리에 생성될 때
인스턴스변수
Instance Variable
클래스 영역 인스턴스가 생성되었을 때
지역변수
Local Variable
메서드, 생성자, 초기화 블럭 영역 내부 변수 선언문이 수행되었을 때


클래스 변수

 모든 인스턴스에서 공통적으로 사용되는 변수가 존재할 때 사용하는 변수로 모든 인스턴스에 적용되고 공유하는 변수이다. 즉 클래스에 소속되어 있는 변수에 접근하여 사용할 수 있다. 클래스 변수를 선언하는 방법은 인스턴스변수 앞에 static을 선언하면 클래스 변수가 된다. static 으로 선언된 변수는 메모리 공간 하나에만 존재하며 어디서나 접근이 가능하게 된다. static 변수는 인스턴스가 생성되기 전(구체적으로는 JVM에 의해서 클래스가 메모리 공간에 올라가는 순간)에 메모리 공간에 생성되면서 초기화가 된다. int 타입의 변수는 0으로 초기화가 되고 String 변수의 경우 null로 초기화가 된다.


인스턴스 변수

 클래스 변수와 마찬가지로 클래스 영역에 선언이 된다. 하지만 이 변수는 인스턴스가 new를 통해 메모리에 생성되어야만 생성된다. 즉, 변수의 값을 읽어오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다. 인스턴스는 독립적인 저장공간을 가지게 되므로 서로 다른 값을 가질 수 있다.


지역 변수

 메서드 내에서 선언되고, 메서드 내에서만 사용 가능하다. 메서드가 종료되면 소멸되어 사용할 수 없게 된다. 지역 변수는 따로 프로그래머가 초기화해줘야 한다.


메소드

 보통 프로그래밍언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스단위로 프로그래밍 하기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 일부 형태로 존재한다. 자바는 이 클래스 내의 함수를 메소드라고 부른다. 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 특정 작업을 수행하는 일련의 기능들을 하나로 묶은 것이다.


 메서드를 사용하는 이유는 한번 메소드를 정의해 놓으면 몇번이고 메소드이름을 통해 호출 할 수 있으므로 재사용이 용이하고 불필요한 코드를 줄일 수 있고 프로그램이 메소드단위로 구성되면 구조화가 되고 메소드들을 거쳐가면서 작동하므로 프로그램의 흐름을 편하게 파악할 수 있게 되고 에러가 발생해도 메서드를 통해 쉽게 찾을 수 있게 된다.


메소드의 구조

 메소드의 구조는 아래와 같다.

리턴타입 메소드이름 (변수타입 변수명, 변수타입 변수명, ... )
{
  //메소드의 기능 구현하는 코드
}

  • Code
    int add(int x, int y) {
    		int result = x + y;
    		return result;        
    		/*메소드를 호출한 곳으로 
    		x+y의 결과가 담긴 result를 반환한다.*/
    	}
    


 위 코드를 보면 add메소드를 호출하면서 int형 x와 y를 넣으면 x와 y를 더한 result 라는 int형 값을 리턴해 주는 기능을 하는 것을 볼 수 있다. 여기서 중요한 것 은 선언부의 리턴타입과 구현부의 리턴값인데 선언부의 리턴타입과 리턴값의 타입은 반드시 일치하여야 한다. 리턴타입은 여러형식으로 쓰이는데 int, long등 기본형 또는 배열array을 리턴해주거나 클래스자체를 리턴해줄 수 도 있다.


 리턴값이 존재하지 않는 메소드도 있는데 리턴값이 없을때에는 리턴타입을 void로 적어서 리턴값이 없다는 것을 알려야 한다. 위 예제처럼 메소드의 return값이 없기 때문에 메소드는 리턴타입을 void로 설정해 주었다. 반환값이 없는 메소드는 그 메소드 안에서 모든 작업을 완료 하게 된다. 위 예제는 메소드가 a와 b를 받아서 합을 구해 리턴하는 것이 없이 콘솔 창에만 출력시키는 기능을 하는 메소드를 구현한 것이다. .


메소드 호출

 메소드를 정의했으면 이제 호출하여 사용하면 되는데 메소드를 호출하는 방법은 아래와 같다.

메소드이름(변수, 변수, 변수...);

 메소드를 호출에서 ( ) 안에 있는 값들은 인자Argument 라고 부르며 인자의 개수, 순서는 호출된 메서드의 매개변수Parameter와 반드시 일치해야 한다. 왜냐하면 인자는 메소드가 호출되면서 매개변수자리로 들어가기 때문이다. 그래서 인자의 타입은 매개변수의 타입과 같거나 형변환이 가능하여야 한다.



 메소드가 실행되면 실행 중에 있던 메소드는 실행을 멈추고 호출된 메소드의 { } 괄호안 코드가 실행된다. 중간에 호출된 메소드의 동작이 끝나면 호출한 메소드로 되돌아가서 다시 이후의 코드들을 실행한다. 메소드는 호출 시 받은 값으로 코드를 실행하고 그 결과를 반환하면서 종료된다. 그래서 메서드의 결과를 저장하기 위한 반환값을 담는 변수는 반환되는 값과 같은 타입이거나 같은 타입이 되도록 형변환 하여야 한다.


예제
  • Code


    MethodInvocation.java
    public class MethodInvocation {
    
    	public static void main(String[] args) {
    		ArithmeticOperation ao = new ArithmeticOperation();
    		int addResult = ao.add(3, 7);
    		int subtractResult = ao.subtract(10, 7);
    		int multiplyResult = ao.multiply(2, 5);
    		int divideResult = ao.divide(10, 2);
    		
    		System.out.println("add(3, 7) 결과 : " + addResult);
    		System.out.println("subtract(10, 7) 결과 : " + subtractResult);
    		System.out.println("multiply(2, 5) 결과 : " + multiplyResult);
    		System.out.println("divide(10, 2) 결과 : " + divideResult);
    	}
    
    	static class ArithmeticOperation {
    		int add(int a, int b) {
    			int result = a + b;
    			return result;
    		}
    		
    		int subtract(int a, int b) {
    			return a - b;     //add메소드 두 줄의 코드를 줄일 수 있다.
    		}
    		
    		int multiply(int a, int b) {
    			return a * b;
    		}
    		
    		int divide(int a, int b) {
    			return a / b;
    		}
    	}
    
  • Result






리턴문

 메소드 안에 코드들이 차례대로 동작 할 때 return문을 만나면 실행중인 메서드가 종료되고 호출한 메소드로 돌아가게 된다. 메소드는 반환하는 값이 존재하든, 존재하지 않든 간에 적어도 하나의 return문을 포함하고 있어야 하지만 반환타입이 void의 경우 return문을 적지 않아도 컴파일러가 메서드의 마지막에 return문을 자동으로 추가하여 컴파일 하게 된다. 반환타입이 void가 아닌경우에 return문이 없는 경우에는 컴파일 에러가 발생하게 된다.

Comments