일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- jquery
- 자바
- php
- 7월 공모주 청약 일정
- css
- 자바스크립트
- 코드이그나이터
- Stock ipo
- 주식 청약
- Eclipse
- html
- JavaScript
- java
- IPO
- 공모주
- Stock
- 주식
- MYSQL
- 맥
- SQL
- 오라클
- 6월 공모주 청약 일정
- 리눅스
- 공모주 청약 일정
- 공모주 청약
- Oracle
- linux
- 제이쿼리
- codeigniter
- 주식 청약 일정
- Today
- Total
개발자의 끄적끄적
[JAVA/자바] 필드(field) - 전역변수, 멤버변수 [펌] 본문
[JAVA/자바] 필드(field) - 전역변수, 멤버변수 [펌]
하나의 클래스는 필드(Field), 생성자(Constructor), 메소드(Method)로 구성된다. 그중 필드(Field)에 대해서 알아보도록 하자.(생성자와메소드는링크 참고)
필드(Field)
필드는 다른 말로멤버변수나전역변수라고 불린다. 변수라는 말처럼 필드는 어떠한(객체)데이터를 저장하기 위한 역할을 담당한다.
필드의 위치
우리가앞에서 사용하던 변수(지역변수)들은 생성자 또는 메소드의 내부 블록({ })에서 정의하였다. 하지만필드는 클래스의 내부이면서 생성자와 메소드 밖에서 정의된다.
필드 선언 및 초기값 - 지역변수와의 차이점
필드를 선언하는 방법은 지역변수를 선언하는 방법과 비슷하다. 선언하는 방법은 아래와 같다.
[접근제어자(public, private 등)] [static, final 등]**자료형 변수명[= 초기값];**
빨간색으로 표시한 부분은 필수적으로 입력할 사항은 아니며 사용에 따라 목적이 달라진다.(접근제어자와 static 등은 별도 포스팅 참고) 필드에서 선언된 변수는**지역변수와는 다르게 값을 할당하지 않아도자동으로 초기값을 갖는다.**
또한 지역변수는 메소드가 호출될 때 메모리에 공간을 할당받고 종료 시 해제되지만필드(전역변수)는 프로그램이 실행되어 종료될 때까지 메모리상에 남아있게 된다.(세부내용은 메모리 구조참고) 따라서필드에서 변수를 선언 시 클래스 내 모든 메소드에서 사용이 가능하다.
필드의 사용
그러면 소스코드를 통해서 위에서 알아본 내용이 무슨 의미인지 알아보도록 하자.
class FieldValue{
// 필드
byte byteF;
char charF;
short shortF;
int intF;
long longF;
float floatF;
double doubleF;
boolean booleanF;
int[] intArray;
String StringF;
// 메소드
public void value(){
System.out.println("byte : "+byteF);
System.out.println("char : "+charF);
System.out.println("short : "+shortF);
System.out.println("int : "+intF);
System.out.println("long : "+longF);
System.out.println("float : "+floatF);
System.out.println("double : "+doubleF);
System.out.println("boolean : "+booleanF);
System.out.println("int[] : "+intArray);
System.out.println("String : "+StringF);
}
}
public class FieldEx01 {
public static void main(String[] args) {
FieldValue fv = new FieldValue();
fv.value();
}
}
필드에 선언만 하고 자동으로 초기값이 설정이 되는지 확인해보기 위한 코드이다. 결과는 아래와 같이 출력된다.
이번에는 전역변수와 지역변수의 차이점을 소스코드를 통해서 알아보자.
class FieldValue02 {
// 필드
int a;
String str;
// 생성자
public FieldValue02(){
str = "전역변수"; // str 초기화
}
// 메소드
public void print(){
int b; // 지역변수 선언
System.out.println(a); // 출력 : 0
// System.out.println(b); // 컴파일 에러
String str = "지역변수"; // 지역변수 선언
System.out.println(str); // 출력 : 지역변수
System.out.println(this.str); // 출력 : 전역변수
}
}
public class FieldEx02 {
public static void main(String[] args) {
FieldValue02 fv = new FieldValue02(); // 인스턴스 생성
fv.print(); // 메소드 호출
}
}
필드에 int a와 String str을 선언하였고 생성자에서 str의 값을 할당하였다. 메소드에는 지역변수 int b를 선언하였다.전역변수 a는 초기값을 자동으로 할당받아 출력되나 지역변수 b는 컴파일 에러가 발생된다. 지역변수는 초기값을 자동으로 할당되지 않기 때문이다. 지역변수로 전역변수와 동일한 String str을 정의하였다. 출력하면 지역변수의 값이 출력된다.메소드 내에서 전역변수와 동일한 타입 및 이름의 변수를 정의하면 지역변수가 우선순위가 높다는 뜻이다.필드의 값을 출력하기 위에선 this.을 사용하면 된다.
마지막으로 위에서 알아본 내용들을 정리해보면 다음과 같다.
1. 필드는 메소드 및 생성자 밖에서 선언되고, 값을 할당하지 않으면 초기값이 자동으로 할당된다.
2. 필드를 선언하면 클래스 전역에서 사용이 가능하다. 다르게 말하면 프로그램의 시작부터 종료까지 메모리상에 남아 공간을 차지한다.
따라서 메소드에서 공통으로 필요한 필드만 선언하여 사용하는게 좋다.
3. 메소드에서 필드와 동일한 변수를 정의하면 메소드의 변수가 우선순위가 높다. 이때 필드의 값을 출력하려면 this.을 이용하면 된다.
출처 : https://m.blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220956313502
'개발 > java & jsp' 카테고리의 다른 글
[java] 비교와 boolean [펌] (0) | 2020.03.05 |
---|---|
[java] 예외(Exception) [펌] (0) | 2020.03.05 |
[Java] StringUtils [펌] (0) | 2020.03.04 |
[java] 소수점 고정시키기 (0) | 2020.03.02 |
[자바] SFTP 파일업로드 디렉토리 생성 (0) | 2020.03.01 |