선언위치에 따른 변수의 종류
변수는 클래스변수, 인스턴스변수, 지역변수 모두 세 종류가 있다.
이 종류는 '변수의 선언된 위치'로 변수의 종류를 알기 위해서는
변수가 선언된 영역을 확인해야한다.
멤버변수를 제외한 나머지 변수들은 모두 지역변수이며
멤버변수에 static이 붙으면 클래스변수, 붙지 않은 것은 인스턴스변수이다.
class Variables {
//멤버변수 영역 : 인스턴스변수, 클래스변수 모두 멤버변수에 속함
int iv // 인스턴스변수
static int cv; // 클래스변수(static변수, 공유변수)
void method() {
int lv = 0; //지역변수
}
}
변수의 종류 | 선언위치 | 생성시기 |
클래스변수 (class variable) |
클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스변수 (instance variable) |
인스턴스가 생성되었을 때 | |
지역변수 (local variable) |
클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) |
변수 선언문이 수행되었을 때 |
인스턴스변수(instance variable)
클래스 영역에 선언되고 생성된 인스턴스 마다 독립적인 저장공간을 가진다.
클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다.
인스턴스 변수의 값을 읽거나 저장하려면 먼저 인스턴스를 생성해야한다.
독립적인 공간을 가지고 인스턴스마다 서로 다른 값을 가질 수 있다.
클래스변수(class variable)
인스턴스변수 앞에 static을 붙이면 만들어지며 모든 인스턴스가 공통된 저장공간을 공유
클래스 영역에 선언되고 인스턴스변수 앞에 static을 붙이면 만들어지며
인스턴스마다 독립적인 공간을 가지는 인스턴스변수와 달리 클래스변수는
모든 인스턴스가 공통된 저장공간(변수)를 공유하게 된다.
클래스 변수는 인스턴스를 생성하지 않아도 사용이 가능하다.
지역변수(local variable)
메서드 블럭{} 내에서 사용되고 소멸하는 변수
메서드 내에 선언되어 메서드 내에서만 사용 가능하고 메서드가 종료되면
소멸되어 사용할 수 없게 된다.
for문이나 while문의 블럭 내에 선언된 변수는 변수가 선언된
블럭{} 내에서만 사용 가능하며 이게 바로 지역변수이다.
메서드
메서드(method)는 특정 작업을 수행하는 일련의 문장을 하나로 묶은 것
수학의 함수와 유사하며 어떤 값을 입력하면 이 값으로 작업을 수행해서
결과를 반환한다.
메서드를 사용하는 이유
1. 높은 재사용성(reusabillity)
이미 java API에서 제공하는 메서드들을 사용하면서 경험한 것처럼 만들어 놓은 메서드는
몇 번이고 호출이 가능하고, 다른 프로그램에서도 사용이 가능하다
2. 중복된 코드의 제거
만약 프로그램에 중복되는 코드가 여러번 들어간다고 할때 이 내용을 메서드로 묶어 만들어 놓고
반복되는 코드를 메서드로 작성해 놓으면 반복되는 문장 대신 한줄의 메서드로 대체할 수 있다.
이렇게 하면 코드의 길이도 짧아지고 변경사항이 생길때 메서드의 내용만 고쳐주면 되기에
수정해야할 코드의 양도 줄고 실수도 줄어든다.
3. 프로그램의 구조화
큰 규모의 프로그램에서는 문장들을 작업단위로 나눠 여러개의 메서드에 담아
프로그램의 구조를 단순화 시키는 것이 필수다.
public static void main(String args[]){
int[] numArr = new int[10];
initArr(numArr); // 1. 배열을 초기화
printArr(numArr); // 2. 배열을 출력
sortArr(numArr); // 3. 배열을 정렬
printArr(numArr); // 4. 배열을 출력
}
이렇게 메서드를 이용하여 프로그램의 전체 흐름을 단순하게 구조화할 수 있다.
메서드의 선언과 구현
메서드는 크게 두 부분, '선언부(header, 머리)'와 '구현부(body, 몸통)'로 이루어져 있다.
매개변수 선언↘
반환타입 메서드이름 (타입 변수명, 타입 변수명, ...)
{
// 메서드 호출시 수행될 코드
}
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
int add(int a, int b)
{
int result = a + b
return result;
}
매개변수 선언(parameter declaration)
매개변수는 메서드가 작업을 수행할때 필요한 값을 제공받기 위한 것이며, 필요한 값의 개수만큼
변수를 선언하며 각 변수 간의 구분은 쉼표','를 사용한다.
매개변수가 없는 메서드라면 매개변수 선언 구역을 공백으로 두면 된다.
메서드의 이름(method name)
메서드의 이름도 변수의 명명규칙대로 작성하면 된다
첫단어는 소문자, 두번째 단어부터 대문자로 시작 . ex)addRunCount
이름만으로 메서드의 기능을 알 수 있도록 함축적이면서
의미가 있는 이름을 짓도록 노력해야 한다.
반환타입(return type)
메서드의 작업수행 결과인 반환값의 타입을 적는다.
만약 반환값이 없는 메서드라면 void를 적어주면 된다.
메서드의 구현부(method body, 메서드 몸통)
메서드의 선언부 다음에 나오는 괄호{}를 메서드의 구현부라고 한다.
메서드를 호출했을 때 수행될 문장들을 넣으면 된다.
return문
메서드의 반환타입이 void가 아닌 경우 구현부{}안에 return문은 반드시 필요하다.
메서드에서 수행한 결과를 반환해주는데 앞서 선언부에서 선언한 반환타입과
일치하거나 자동 형변환이 가능한 것 이어야한다.
선언부의 매개변수는 여러개도 선언이 가능하지만 반환해주는 return값은
최대 하나만 허용한다.
지역변수
메서드 내에 선언된 모든 변수들은 그 메서드 내에서만 사용 할 수 있고
서로 다른 메서드라면 같은 이름의 변수를 선언해도 된다.
메서드 내에 선언된 변수를 지역변수라고 한다.
변수와 메서드에 대한 내용이 많이 글을 나누려 한다.
[JAVA BASE/05. OOP(객체지향 프로그래밍)] - 02-2. [JAVA] 변수와 메서드
메서드 각 부위의 명칭에 대해 한번 더 정리할수 있어 좋았고
슬슬 정말 자바에 대한 공부를 하는거 같아 설렌다.😆
댓글