공부했던 자료 정리하는 용도입니다.
재배포, 수정하지 마세요.
변수(Variable)
class Variables{
int iv; //인스턴스 변수
static int cv; //클래스변수(static 변수, 공유변수)
void method(){
int lv = 0; //지역변수
}
}
변수는 선언된 위치에 따라 구분하며 클래스 변수, 인스턴스 변수, 지역변수로 총 3개가 있다. static 이 붙은 변수는 클래스 변수라고 하고 멤버변수를 제외한 나머지 변수들은 모두 지역변수이다. 위의 코드에서 iv 와 cv 는 class 영역 안에 선언되어 있으므로 멤버 변수이다. 그중에서 cv 는 static 이 붙어있으므로 class 변수이고 lv 는 메서드 영역인 method( ) 안에 선언되어 있으므로 지역변수이다.
변수의 종류
1. 인스턴스 변수(Instance Variable)
클래스 영역에 선언되고 인스턴스를 생성할 때 만들어지기 때문에 사용하기 위해서는 먼저 인스턴스를 생성해야 한다. 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우 인스턴스 변수로 선언한다.
2. 클래스변수(Class Variable)
앞에 static 을 붙여서 생성할 수 있다. 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우에는 클래스 변수로 선언해야 한다. 클래스 변수는 클래스가 메모리에 올라갈 때 생성되므로 인스턴스 변수와 달리 인스턴스를 생성하지 않고도 바로 사용할 수 있다. 클래스변수는 메모리에 로딩(loading)될 때 생성되어 프로그램이 종료될 때까지 유지되며 public 을 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 전역 변수(global variable)의 성격을 갖는다.
클래스 변수 를 사용할 때는 클래스이름.클래스변수 의 형태로 사용하는 것이 좋다. 참조변수 만 사용해서 클래스 변수를 사용할 수도 있지만 그렇게 하면 인스턴스 변수 로 오해하기 쉽기 때문이다.
3. 지역변수(Local Variable)
메서드 내에 선언되어 메서드 내에서만 사용 가능하며 메서드가 종료되면 소멸되어 사용할 수 없게 된다. for 문이나 while 문의 블럭내에 선언된 지역변수는 지역변수가 선언된 블럭 { } 내에서만 사용 가능하며, 블럭{ } 을 벗어나면 소멸되어 사용할 수없게 된다.
메서드(Method)
메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다. 메서드를 사용하는 이유에는 대표적으로 3가지가 있다.
1. 높은 사용성(reusability) : 한번 만들어 놓은 메서드는 여러 번 호출할 수 있고 다른 프로그램에서도 사용 가능하다. |
메서드의 선언과 구현
반환타입 메서드이름(타입 변수명, 타입 변수명 ...){ //선언부(header)
//메서드 호출시 수행될 코드 //구현부(body)
}
//예시
int add(int a, int b){ //선언부(header)
int result = a + b; //구현부(body)
return result; //구현부(body)
}
메서드는 선언부(header)와 구현부(body)로 이루어져 있다.
메서드 선언부(header)의 요소
- 메서드 선언부(Method Declaration, Method header)
: 메서드 선언부는 메서드의 이름 과 매개변수 선언 그리고 반환타입 으로 구성되어 있어 메서드가 작업을 수행하기 위해 어떤 값들을 필요로 하고 작업의 결과로 어떤 타입의 값을 반환하는지에 대한 정보를 제공한다. 메서드의 선언부를 변경하게 되면 그 메서드가 호출되는 모든 곳도 같이 변경해야 되기 때문에 신중히 작성해야 한다. - 매개변수 선언(Parameter Declaration)
: 매개변수는 메서드가 작업을 수행하는데 필요한 값들(입력)을 받기 위한 것이다. 필요한 만큼의 개수만큼 변수를 선언할 수 있고 각각의 변수들은 쉼표( , )로 구분한다. 값을 받을 필요가 없다면 괄호 ( ) 안에 아무것도 적지 않는다. 매개변수로 배열 이나 참조변수 를 사용할 수도 있다. 일반적인 변수 선언과 달리 두 변수의 타입이 같아도 타입을 생략할 수 없다. - 메서드의 이름(Method Name)
: 메서드의 이름은 변수의 명명규칙과 같이 지을 수 있다. 이름만으로 메서드의 기능을 쉽게 알 수 있도록 함축적이면서도 의미 있는 이름을 지어야 한다. - 반환 타입(Return Type)
: 메서드의 작업 수행 결과인 ' 반환값 (return value)'의 타입을 적는다. 반환 값이 없는 경우 void 를 적는다.
메서드 구현부(body)의 요소
- return문
: 메서드의 반환 타입이 void 가 아닌 경우 구현부{ } 안에 return 반환값 이 반드시 있어야 한다. return 문은 작업을 수행한 결과인 반환 값을 호출한 메서드로 전달하는데 이 값의 타입은 반환 타입과 일치하거나 적어도 자동 형 변환이 가능한 것이어야 한다. 매개변수는 여러 개를 사용할 수 있지만 return 값은 무조건 1개밖에 사용할 수없다. - 지역변수(Local Variable)
: 메서드 내에 선언된 변수를 지역변수라고 한다. 메서드 내에 선언된 변수들은 그 메서드 내에서만 사용할 수 있으므로 서로 다른 메서드라면 같은 이름의 변수를 선언해도 된다.
- 매개변수의 유효성 검사
: 잘못된 값이 매개변수로 오는 경우가 있기 때문에 적절하지 않은 값이 매개변수를 통해 넘어온다면 매개변수의 값을 보정한다던지, 보정하는 것이 불가능하다면 return 문을 사용해서 작업을 중단하고 호출한 메서드로 돌아간다던지 하는 작업을 넣어주는 것이 좋다.
메서드의 호출
메서드이름(값1, 값2 ..) //값은 선언부에서 정의된 매개변수의 타입과 개수에 맞춰서 넣는다.
int result = add(3, 5); // int add(int x, int y)를 호출하고, 반환값(return값)을 result에 저장
메서드를 정의했어도 호출해야 구현부 { } 의 문장들이 수행된다.( main 메서드는 프로그램 실행 시에 OS에 의해 자동으로 호출됨) 메서드를 호출할 때 괄호 ( ) 안에 지정해준 값들을 인자(argument)또는 인수라고 하는데 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다.
return문
return 문은 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아간다. 프로그래머는 반환 값이 있을 때만 return 문을 을 써주면 됐지만 원래는 반환 값의 유무에 관계없이 모든 메서드에는 적어도 하나의 return 문이 있어야 한다. 그래서 void 인 경우에 컴파일러가 메서드의 마지막에 return ; 을 자동적으로 추가해준다.
■ 반환 값
return 문의 반환 값으로는 x + y 같은 수식이 올 수도 있다. 수식이 온 경우에는 수식을 계산한 결과가 반환된다.
'Back end > Java' 카테고리의 다른 글
[Java] 오버로딩(Overloading), 생성자(Constructor), 초기화 (0) | 2019.06.27 |
---|---|
[Java] JVM의 메모리 구조, 메서드(Method) (0) | 2019.06.20 |
[Java] 객체지향 언어, 클래스(Class)와 객체(instance) (0) | 2019.06.11 |
[Java] 배열(Array) (0) | 2019.06.04 |
[Java] 조건문과 반복문 (0) | 2019.05.23 |