"필드 (자바)"의 두 판 사이의 차이
(새 문서: '''필드'''(field)란 데이터베이스에서 세로 방향으로 표시한 컬럼(column)을 말한다. '''칸''', '''열'''(列) 또는 '''컬럼'''이라고도 한다. ''...) |
(→접근 방법: main driver method 내에서의 non-static method 사용 방법 수정) |
||
(사용자 4명의 중간 판 42개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''필드'''(field)란 [[ | + | '''필드'''(field)란 [[클래스]]를 구성하는 요소 중 하나로 [[클래스]] 내부 멤버이다. 어떠한 데이터를 저장하기 위한 역할을 담당하며 [[클래스]] 내부의 생성자와 [[메소드]] 밖에 정의가 된다. 필드는 클래스에서 내부 멤버이기 때문에 '''멤버변수'''<!--멤버 변수-->(member variable)라고도 불리며, [[클래스]] 내 전역에서 사용하기 때문에 전역 변수라고도 불리며 데이터를 저장하기 위한 역할을 담당하며 생성자와 [[메소드]] 밖에서 사용한다. 즉 필드란 클래스 안에서 독립적으로 선언되는 변수를 뜻한다.<ref name="필드변수">Velvet, 〈[https://m.blog.naver.com/PostView.nhn?blogId=pkss1230&logNo=220418155364&proxyReferer=https:%2F%2Fwww.google.com%2F 필드와 변수]〉, 《개인블로그》, 2015-07-12</ref> |
+ | |||
+ | ==특징== | ||
+ | 필드의 경우 다른 지역변수들과 다르게 초기화를 하지 않아도 기본값이 자동으로 초기화 된다는 특징을 가지고 있다. String의 경우 null, int의 경우 0으로 초기화 된다. 그리고 해당 [[클래스]] 내의 모든 [[메소드]]에 접근이 가능하다. | ||
+ | 생성의 경우 객체가 생성될 때 함께 생성되며, 생성된 객체를 더 이상 참조하지 않을 때 가비지 컬렉터(Garbage Collector)에 의해서 제거된다.<ref name="개인블로그">JOKER, 〈[https://blog.naver.com/heartflow89/220956313502 자바 필드(field)-전역변수,멤버변수]〉, 《개인블로그》, 2017-03-13</ref> | ||
+ | |||
+ | 필드를 선언할 때는 접근 지정자, 필드의 타입, 필드의 이름 세가지를 정해줘야 한다. 접근 지정자에는 public과 private가 있으며, public은 모든 클래스로 부터 접근 가능, private는 클래스 내부에서만 접근이 가능하며 이 외에는 접근이 불가능하다.<ref name="개인블로그3">Yown, 〈[https://luckyyowu.tistory.com/193 Java 08 : 필드와 메소드]〉, 《개인블로그》, 2014-07-30</ref> | ||
+ | |||
+ | 필드는 객체의 고유 데이터, 객체가 가져야할 부붐, 객체의 현재 상태 데이터를 저장한다. 자동차를 예로 들 때 자동차에 필요한 고유 데이터는 제작회사, 모델명, 색, 최고 속도가 필요하고 현재 속도, 엔진 회전 수의 상태 데이터와 차체, 엔진, 타이어와 같은 부품이 필요하다가 필요하다. 이런 자동차를 클래스로 설계 할 때 이전에 말한 정보들은 클래스의 필드로 선언이 된다. | ||
+ | |||
+ | public class Car { | ||
+ | //고유 데이터 | ||
+ | String 회사; | ||
+ | String 모델; | ||
+ | String 색; | ||
+ | int 최고속도; | ||
+ | |||
+ | //상태 | ||
+ | int 현재 속도; | ||
+ | int 엔진 회전수; | ||
+ | |||
+ | //부품 | ||
+ | Body 차체; | ||
+ | Engine 엔진; | ||
+ | Tire 타이어; | ||
+ | } | ||
+ | |||
+ | 위와 같은 형태로 정보들을 필드로 선언해 클래스를 사용할 때 편하게 정보를 변경할 수 있다.<ref name="개인블로그4">kephl, 〈[https://kephilab.tistory.com/46 3. Java 자바 - 클래스의 구성 멤버]〉, 《개인블로그》, 2020-05-15</ref> | ||
+ | |||
+ | ===필드 선언=== | ||
+ | 필드 선언은 중괄호 블록 어디서든 존재할 수 있다. 생성자 선언과 메소드 선언의 앞, 뒤 어디서든 필드 선언이 가능하다. 하지만 생성자와 메소드 중괄호 블록 내부에서는 선언될 수 없으며, 생성자와 메소드 중괄호 내부에 선언된 것은 모두 로컬 변수로 필드라고 하지 않는다. | ||
+ | |||
+ | 필드의 선언은 변수의 선언 형태와 비슷해 클래스 멤버 변수라고 불리기도 하며 형태는 | ||
+ | 타입 필드 [ = 초기값]; | ||
+ | 형태로 선언한다.<ref name="개인블로그4">kephl, 〈[https://kephilab.tistory.com/46 3. Java 자바 - 클래스의 구성 멤버]〉, 《개인블로그》, 2020-05-15</ref> | ||
+ | |||
+ | ==활용== | ||
+ | [[자바]]에서 필드를 사용하기 위해서는 코드 내에 선언을 해주어야 한다. 필드를 사용하는 것은 필드값을 읽고, 변경하는 작업을 말한다. 클래스 내부의 생성자나 메소드에서 사용할 경우 단순히 필드 이름으로 읽고 변경하면 되지만, 클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다. 필드는 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문이다.<ref name="개인블로그4">kephl, 〈[https://kephilab.tistory.com/46 3. Java 자바 - 클래스의 구성 멤버]〉, 《개인블로그》, 2020-05-15</ref> | ||
+ | |||
+ | === 활용 위치 === | ||
+ | [[파일:필드 선언 위치.png|380픽셀|썸네일|필드 위치]] | ||
+ | [[클래스]] 내의 필드는 멤버 변수 혹은 전역 변수라고도 하기 때문에 [[클래스]] 내부 중괄호 안 어느 위치에서나 선언이 가능하다. 하지만 [[메소드]] 혹은 생성자의 밖에 선언되어야 한다.<ref name="개인블로그2">Ara Blog, 〈[https://hunit.tistory.com/154 자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수)]〉, 《개인블로그》, 2015-11-02</ref> | ||
+ | |||
+ | public class 클래스이름 { | ||
+ | |||
+ | int a; //필드선언 | ||
+ | |||
+ | //메소드 | ||
+ | public void method(){ | ||
+ | int a; //지역변수 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | === 활용 방법 === | ||
+ | 필드 선언의 필수 입력 사항은 자료형과 변수명이며 이 외의 [[접근제한자]]나 static 등의 사항들은 목적에 따라 추가 할 수 있다. 필드의 경우 초기값을 선언하지 않아도 자동으로 초기값을 가지기 때문에 초기값을 지정해지 주지 않고 사용해도 에러가 발생하지 않으며, 자동으로 가지게 되는 초기값은 '0'과 같다. | ||
+ | |||
+ | :{|class=wikitable width=700 style="background-color:#ffffee" | ||
+ | |+필드타입종류<ref name="클래스 선언">devuna, 〈[https://devuna.tistory.com/4 클래스(class) 선언방법/필드/생성자]〉, 《개인블로그》, 2019-12-01</ref> | ||
+ | !align=center style="background-color:#ffeecc"|분류 | ||
+ | !align=center style="background-color:#ffeecc"|데이터 타입 | ||
+ | !align=center style="background-color:#ffeecc"|초기값 | ||
+ | |- | ||
+ | |align=center rowspan="5"|정수타입 | ||
+ | |align=center|byte | ||
+ | |align=center|0 | ||
+ | |- | ||
+ | |align=center|char | ||
+ | |align=center|\u0000(빈 공백) | ||
+ | |- | ||
+ | |align=center|short | ||
+ | |align=center|0 | ||
+ | |- | ||
+ | |align=center|int | ||
+ | |align=center|0 | ||
+ | |- | ||
+ | |align=center|long | ||
+ | |align=center|oL | ||
+ | |- | ||
+ | |align=center rowspan="2"|실수타입 | ||
+ | |align=center|float | ||
+ | |align=center|0.0F | ||
+ | |- | ||
+ | |align=center|double | ||
+ | |align=center|0.0 | ||
+ | |- | ||
+ | |align=center|논리타입 | ||
+ | |align=center|boolean | ||
+ | |align=center|false | ||
+ | |- | ||
+ | |align=center|참조타입 | ||
+ | |align=center|배열 | ||
+ | 클래스 (String 포함) | ||
+ | |||
+ | 인터페이스 | ||
+ | |align=center|null | ||
+ | |} | ||
+ | |||
+ | '''목적에 따른 추가 방법''' | ||
+ | public class 클래스이름 { | ||
+ | |||
+ | public static int a; // 접근제한자 + 정적 + 자료형 + 변수명 + ;필드선언 | ||
+ | |||
+ | } | ||
+ | |||
+ | '''초기값을 주지 않는 경우''' | ||
+ | public class 클래스이름 { | ||
+ | |||
+ | int a; //필드선언 | ||
+ | |||
+ | } | ||
+ | |||
+ | '''초기값을 주는 경우''' | ||
+ | public class 클래스이름 { | ||
+ | |||
+ | int a=10; //필드선언 | ||
+ | |||
+ | } | ||
+ | |||
+ | 위 코드에서 선언한 필드 a의 값은 설명과 동일하게 0으로 나오며 string의 경우 null, boolean의 경우 false 형태와 같이 자료형에 맞는 초기값을 가지게 된다. | ||
+ | |||
+ | ===접근 방법=== | ||
+ | '''필드'''에 접근하기 위한 방법은 다양하다. [[클래스]]를 이용해 새로운 객체를 만들어 객체 내의 필드를 사용하기 위해서는 아래와 같은 방식을 사용한다. | ||
+ | |||
+ | class human { | ||
+ | int kg; | ||
+ | int cm; | ||
+ | } | ||
+ | |||
+ | 위와 같은 human 클래스가 있을 때 새로운 객체를 생성해 사용하기 위해서는 ''''객체명.필드명'''' 형태를 갖추어야 한다. | ||
+ | |||
+ | human이라는 클래스의 객체를 사용하는 예이다. | ||
+ | |||
+ | public class example { | ||
+ | public static void main(String[] args){ | ||
+ | human hu1 = new human(); | ||
+ | //human 객체를 생성 | ||
+ | |||
+ | hu1.kg=70; | ||
+ | hu1.cm=170; | ||
+ | //hu1의 kg과 cm이라는 필드에 값을 넣음 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 위와 같이 필드에 값을 추가할 수 있다. | ||
+ | |||
+ | 또한 클래스 내부 [[메소드]]에서 필드 변수를 사용가능하다. 하지만 [[메소드]] 내의 지역변수와 필드 변수의 변수명이 같을 시 [[메소드]] 내의 지역변수를 우선순위로 하며, 만약 필드를 사용하고 싶다면 변수명 앞에 ''''this.''''를 사용한다면 필드 변수를 사용할 수 있다. | ||
+ | |||
+ | class Human { | ||
+ | int kg; | ||
+ | int cm; | ||
+ | public void example(){ | ||
+ | int kg=100; | ||
+ | |||
+ | this.kg=70; | ||
+ | } | ||
+ | public static void main(String[] args){ | ||
+ | Human human = new Human(); | ||
+ | |||
+ | human.example(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 다음과 같이 작성 시 example 내의 kg은 100이라는 숫자가 들어가고 human의 kg은 70이라는 값이 나오게 된다. | ||
+ | |||
+ | ===필드 사용=== | ||
+ | |||
+ | public class Car() { | ||
+ | //필드 | ||
+ | int speed; | ||
+ | |||
+ | //생성자 | ||
+ | Car() { | ||
+ | speed = 0; | ||
+ | } | ||
+ | |||
+ | //메소드 | ||
+ | void method( ... ) { | ||
+ | speed = 10; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | 예시로 만든 클래스인 Car 클래스에서 생성자와 메소드에서 필드의 값을 변경 하듯이 클래스 내부에서는 값 변경이 가능하다. | ||
+ | |||
+ | void method() { | ||
+ | //Car 객체 생성 | ||
+ | Car myCar = new Car(); | ||
+ | //필드 사용 | ||
+ | myCar.speed = 60; | ||
+ | } | ||
+ | |||
+ | 또한 클래스로부터 객체를 생성하고 필드를 사용해 객체에 소속된 데이터를 수정하듯이 필드의 데이터 값을 변경할 수 있다. | ||
+ | |||
+ | 변수는 자신이 선언된 생성자 또는 메소드 블록 내부에서만 사용할 수 있는 반면, 필드는 생성자와 모든 메소드에서 사용이 가능하다. | ||
+ | 외부 Person 클래스에서 Car 클래스의 speed 필드값을 사용하려면 우선적으로 Car 객체를 생성해야하며 myCar 변수가 Car 객체를 참조하게 되면 도트(.) 연산자로 speed 필드에 접근할 수 있다. | ||
+ | |||
+ | 도트 연산자는 객체 접근 연산자로 객체가 가지고 있는 필드, 메소드를 사요하고자 할 때 사용된다.<ref name="개인블로그4">kephl, 〈[https://kephilab.tistory.com/46 3. Java 자바 - 클래스의 구성 멤버]〉, 《개인블로그》, 2020-05-15</ref> | ||
+ | |||
+ | {{각주}} | ||
+ | |||
+ | ==참고자료== | ||
+ | * Velvet, 〈[https://m.blog.naver.com/PostView.nhn?blogId=pkss1230&logNo=220418155364&proxyReferer=https:%2F%2Fwww.google.com%2F 필드와 변수]〉, 《개인블로그》, 2015-07-12 | ||
+ | * JOKER, 〈[https://blog.naver.com/heartflow89/220956313502 자바 필드(field)-전역변수,멤버변수]〉, 《개인블로그》, 2017-03-13 | ||
+ | * Ara Blog, 〈[https://hunit.tistory.com/154 자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수)]〉, 《개인블로그》, 2015-11-02 | ||
+ | * kephl, 〈[https://kephilab.tistory.com/46 3. Java 자바 - 클래스의 구성 멤버]〉, 《개인블로그》, 2020-05-15 | ||
== 같이 보기 == | == 같이 보기 == | ||
5번째 줄: | 209번째 줄: | ||
* [[레코드]] | * [[레코드]] | ||
* [[속성]] | * [[속성]] | ||
+ | * [[클래스]] | ||
+ | * [[메소드]] | ||
+ | * [[접근제어자]] | ||
+ | * [[필드]] | ||
+ | |||
+ | {{프로그래밍|검토 필요}} | ||
[[분류:데이터베이스]] | [[분류:데이터베이스]] |
2022년 5월 10일 (화) 15:24 기준 최신판
필드(field)란 클래스를 구성하는 요소 중 하나로 클래스 내부 멤버이다. 어떠한 데이터를 저장하기 위한 역할을 담당하며 클래스 내부의 생성자와 메소드 밖에 정의가 된다. 필드는 클래스에서 내부 멤버이기 때문에 멤버변수(member variable)라고도 불리며, 클래스 내 전역에서 사용하기 때문에 전역 변수라고도 불리며 데이터를 저장하기 위한 역할을 담당하며 생성자와 메소드 밖에서 사용한다. 즉 필드란 클래스 안에서 독립적으로 선언되는 변수를 뜻한다.[1]
특징[편집]
필드의 경우 다른 지역변수들과 다르게 초기화를 하지 않아도 기본값이 자동으로 초기화 된다는 특징을 가지고 있다. String의 경우 null, int의 경우 0으로 초기화 된다. 그리고 해당 클래스 내의 모든 메소드에 접근이 가능하다. 생성의 경우 객체가 생성될 때 함께 생성되며, 생성된 객체를 더 이상 참조하지 않을 때 가비지 컬렉터(Garbage Collector)에 의해서 제거된다.[2]
필드를 선언할 때는 접근 지정자, 필드의 타입, 필드의 이름 세가지를 정해줘야 한다. 접근 지정자에는 public과 private가 있으며, public은 모든 클래스로 부터 접근 가능, private는 클래스 내부에서만 접근이 가능하며 이 외에는 접근이 불가능하다.[3]
필드는 객체의 고유 데이터, 객체가 가져야할 부붐, 객체의 현재 상태 데이터를 저장한다. 자동차를 예로 들 때 자동차에 필요한 고유 데이터는 제작회사, 모델명, 색, 최고 속도가 필요하고 현재 속도, 엔진 회전 수의 상태 데이터와 차체, 엔진, 타이어와 같은 부품이 필요하다가 필요하다. 이런 자동차를 클래스로 설계 할 때 이전에 말한 정보들은 클래스의 필드로 선언이 된다.
public class Car { //고유 데이터 String 회사; String 모델; String 색; int 최고속도; //상태 int 현재 속도; int 엔진 회전수; //부품 Body 차체; Engine 엔진; Tire 타이어; }
위와 같은 형태로 정보들을 필드로 선언해 클래스를 사용할 때 편하게 정보를 변경할 수 있다.[4]
필드 선언[편집]
필드 선언은 중괄호 블록 어디서든 존재할 수 있다. 생성자 선언과 메소드 선언의 앞, 뒤 어디서든 필드 선언이 가능하다. 하지만 생성자와 메소드 중괄호 블록 내부에서는 선언될 수 없으며, 생성자와 메소드 중괄호 내부에 선언된 것은 모두 로컬 변수로 필드라고 하지 않는다.
필드의 선언은 변수의 선언 형태와 비슷해 클래스 멤버 변수라고 불리기도 하며 형태는
타입 필드 [ = 초기값];
형태로 선언한다.[4]
활용[편집]
자바에서 필드를 사용하기 위해서는 코드 내에 선언을 해주어야 한다. 필드를 사용하는 것은 필드값을 읽고, 변경하는 작업을 말한다. 클래스 내부의 생성자나 메소드에서 사용할 경우 단순히 필드 이름으로 읽고 변경하면 되지만, 클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야 한다. 필드는 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문이다.[4]
활용 위치[편집]
클래스 내의 필드는 멤버 변수 혹은 전역 변수라고도 하기 때문에 클래스 내부 중괄호 안 어느 위치에서나 선언이 가능하다. 하지만 메소드 혹은 생성자의 밖에 선언되어야 한다.[5]
public class 클래스이름 { int a; //필드선언 //메소드 public void method(){ int a; //지역변수 } }
활용 방법[편집]
필드 선언의 필수 입력 사항은 자료형과 변수명이며 이 외의 접근제한자나 static 등의 사항들은 목적에 따라 추가 할 수 있다. 필드의 경우 초기값을 선언하지 않아도 자동으로 초기값을 가지기 때문에 초기값을 지정해지 주지 않고 사용해도 에러가 발생하지 않으며, 자동으로 가지게 되는 초기값은 '0'과 같다.
필드타입종류[6] 분류 데이터 타입 초기값 정수타입 byte 0 char \u0000(빈 공백) short 0 int 0 long oL 실수타입 float 0.0F double 0.0 논리타입 boolean false 참조타입 배열 클래스 (String 포함)
인터페이스
null
목적에 따른 추가 방법
public class 클래스이름 { public static int a; // 접근제한자 + 정적 + 자료형 + 변수명 + ;필드선언 }
초기값을 주지 않는 경우
public class 클래스이름 { int a; //필드선언 }
초기값을 주는 경우
public class 클래스이름 { int a=10; //필드선언 }
위 코드에서 선언한 필드 a의 값은 설명과 동일하게 0으로 나오며 string의 경우 null, boolean의 경우 false 형태와 같이 자료형에 맞는 초기값을 가지게 된다.
접근 방법[편집]
필드에 접근하기 위한 방법은 다양하다. 클래스를 이용해 새로운 객체를 만들어 객체 내의 필드를 사용하기 위해서는 아래와 같은 방식을 사용한다.
class human { int kg; int cm; }
위와 같은 human 클래스가 있을 때 새로운 객체를 생성해 사용하기 위해서는 '객체명.필드명' 형태를 갖추어야 한다.
human이라는 클래스의 객체를 사용하는 예이다.
public class example { public static void main(String[] args){ human hu1 = new human(); //human 객체를 생성 hu1.kg=70; hu1.cm=170; //hu1의 kg과 cm이라는 필드에 값을 넣음 } }
위와 같이 필드에 값을 추가할 수 있다.
또한 클래스 내부 메소드에서 필드 변수를 사용가능하다. 하지만 메소드 내의 지역변수와 필드 변수의 변수명이 같을 시 메소드 내의 지역변수를 우선순위로 하며, 만약 필드를 사용하고 싶다면 변수명 앞에 'this.'를 사용한다면 필드 변수를 사용할 수 있다.
class Human { int kg; int cm; public void example(){ int kg=100; this.kg=70; } public static void main(String[] args){ Human human = new Human(); human.example(); } }
다음과 같이 작성 시 example 내의 kg은 100이라는 숫자가 들어가고 human의 kg은 70이라는 값이 나오게 된다.
필드 사용[편집]
public class Car() { //필드 int speed; //생성자 Car() { speed = 0; } //메소드 void method( ... ) { speed = 10; } }
예시로 만든 클래스인 Car 클래스에서 생성자와 메소드에서 필드의 값을 변경 하듯이 클래스 내부에서는 값 변경이 가능하다.
void method() { //Car 객체 생성 Car myCar = new Car(); //필드 사용 myCar.speed = 60; }
또한 클래스로부터 객체를 생성하고 필드를 사용해 객체에 소속된 데이터를 수정하듯이 필드의 데이터 값을 변경할 수 있다.
변수는 자신이 선언된 생성자 또는 메소드 블록 내부에서만 사용할 수 있는 반면, 필드는 생성자와 모든 메소드에서 사용이 가능하다. 외부 Person 클래스에서 Car 클래스의 speed 필드값을 사용하려면 우선적으로 Car 객체를 생성해야하며 myCar 변수가 Car 객체를 참조하게 되면 도트(.) 연산자로 speed 필드에 접근할 수 있다.
도트 연산자는 객체 접근 연산자로 객체가 가지고 있는 필드, 메소드를 사요하고자 할 때 사용된다.[4]
각주[편집]
- ↑ Velvet, 〈필드와 변수〉, 《개인블로그》, 2015-07-12
- ↑ JOKER, 〈자바 필드(field)-전역변수,멤버변수〉, 《개인블로그》, 2017-03-13
- ↑ Yown, 〈Java 08 : 필드와 메소드〉, 《개인블로그》, 2014-07-30
- ↑ 4.0 4.1 4.2 4.3 kephl, 〈3. Java 자바 - 클래스의 구성 멤버〉, 《개인블로그》, 2020-05-15
- ↑ Ara Blog, 〈자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수)〉, 《개인블로그》, 2015-11-02
- ↑ devuna, 〈클래스(class) 선언방법/필드/생성자〉, 《개인블로그》, 2019-12-01
참고자료[편집]
- Velvet, 〈필드와 변수〉, 《개인블로그》, 2015-07-12
- JOKER, 〈자바 필드(field)-전역변수,멤버변수〉, 《개인블로그》, 2017-03-13
- Ara Blog, 〈자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수)〉, 《개인블로그》, 2015-11-02
- kephl, 〈3. Java 자바 - 클래스의 구성 멤버〉, 《개인블로그》, 2020-05-15
같이 보기[편집]