728x90
반응형
먼저 바로 수업 시간에 사용했던 예제 코드를 공유해보겠다.
public class VariableTest {
//자바에서 변수의 종류 [멤버변수(필드), 지역변수, 매개변수, 정적변수]
//멤버변수 - class {..} 안에 선언된 변수
int a; //자동 0으로 초기화
int b;
//지역변수 - 메소드 {..} 안에 선언된 변수
void aaa() {
int k; //지역변수 : 자동 초기화되지 않는다 -- 쓰레기값
System.out.println(a);
//System.out.println(k);//error - 쓰레기는 출력 불가
}
void bbb() {
//클래스의 멤버변수는 클래스 영역 어디서든 인식가능
a = 50;
System.out.println(a);//50
//aaa()메소드 영역 안에 있는 지역변수 k는 인식불가
//k = 30;// error
//멤버변수와 같은 이름을 가진 지역변수가 있을 수 있다
int a;//지역 변수
a =30;
System.out.println(a); //30
//x = 50; error - 다른 함수의 매개변수는 그 지역에서만 사용 가능
}
//매개변수는 지역변수의 일종
void ccc(int x, int a) {
x++;
a = 100;
c = 50;
}
//클래스 밖에 변수 선언은 불가
//자바에서는 전역 변수가 없다
//재귀호출 : Recursive call
void eee() {
eee(); //본인이 본인 메소드를 호출할 수도 있다
}
int c;//멤버변수 - 선언순서와 상관없이 객체가 처음 생성될 때 같이 만들어짐
}
천천히 위에서 아래로 순서대로 읽다보면 크게 C언어에서 벗어나는 개념은 없어 이해하는데에 큰 어려움은 없을 것이다.
사실 자바에는 전역 변수는 없지만 멤버 변수가 그 역할과 비슷하다고 생각하면 편하다.
또, 멤버 변수는 클래스 안에 여러 메소드가 작성된 후에 선언해도
이 변수는 객체가 처음 생성될 때 같이 만들어지기 때문에 선언 순서는 상관이 없다.
초보자들이 int c를 다른 메소드에서 가져다쓰면 에러라고 생각할 수 있어 한 줄 끄적여보았다.
이번에는 매개변수가 왜 지역변수냐고 되려 궁금해할 수도 있을 것 같다.
내가 만든 void ccc라는 메소드에 파라미터(매개변수)가 2개 있는데 이 변수는 사실 다른 메소드에서 알아들을 수 없다.
bbb메소드에서 x에 어떤 값을 대입하려고 하면 당연히 컴파일러는 x가 누구인지 몰라서 에러라고 하게된다.
마지막으로 정적변수가 있는데 영어 그대로 static이다. 이 녀석은 추후 글에서 다시 설명할 기회가 있을 것이다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
자바의 생성자(Constructor) (0) | 2022.04.29 |
---|---|
자바의 접근 제한자(Access Modifier) (0) | 2022.04.28 |
자바에서의 메소드 - 2 (0) | 2022.03.22 |
자바에서의 메소드 (0) | 2022.03.10 |
자바의 패키지 (0) | 2022.03.07 |