멤버
멤버란 객체 지향 프로그래밍(OOP)에서 하나의 클래스를 구성하는 개별적인 구성 요소를 말한다. 클래스의 멤버에 변수(Variable)와 메소드(Method) 및 다른 클래스(Class)가 있다. 하나의 클래스는 다른 클래스를 자신의 멤버로 포함(Composite)할 수 있다. 이 때 다른 클래스에 포함되는 작은 클래스를 내부 클래스(Inner Class)라고 하고, 다른 클래스를 포함하는 큰 클래스를 외부 클래스(Outer Class)라고 한다.
개요
맴버(member)는 영어로 구성원이라는 뜻읻. 객체에서의 맴버는 변수와 메소드가 있다.[1]
특징
맴버 변수
변수를 선언위치에 따라 맴버변수와 지역변수로 크게 구분지을 수 있다.
맴버변수는 선언위치가 '클래스 영역'이고, 지역변수의 선언위치는'메소드나 생성자 내부'이다. 여기에서 맴버변수는 또 두가지로 나뉘는데, 클래스 변수와 인스턴스 변수로 나뉘어 진다. 이 둘은 같은 맴버변수에 속하지만 필요한 상황이 굉장히 다르다.[2]
클래스 변수
클래스 변수란 클래스 내에서 static을 붙여서 선언하는 변수를 말한다. 클래스 변수는 한번 선언되면 해당 클래스의 모든 인스턴스가 같은 저장공간을 가리킨다. 또한 전역변수라고 부르기도 한다.
public class Webtest { static int sval = 123; public static void main(String[] srgs){ Webtest ex1 = new Webtest(); Webtest ex2 = new Webtest(); System.out.println(ex1.sval); ex2.sval = 321; System.out.println(ex1.sval); } }
// 실행결과 123 321
이런 결과가 나오는데 그 이유는 sval은 모든 인스턴스에서 하나의 저장공간을 공유하기 때문에 다른 인스턴스에서 변경하면 다른 인스턴스도 변경된 값을 가지게 되기 때문이다.
인스턴스 변수
인스턴스 변수는 클래스 변수와 마찬가지로 클래스 내에 선언한다. 클래스 변수와의 차이점은 인스턴스에 종속되어 인스턴스 생성시마다 새로운 저장공간을 할당한다. 즉 저장공간이 공유되지 않는다. 또한 인스턴스에 종속되기 때문에 꼭 인스턴스 객체에서 호출해 주어야 한다. 이런 점들이 클래스 변수와의 가장 큰 차이점이다.
public class Webtest{ static int sval = 123; int ival = 321; public static void main(String[] args){ System.out.println(sval); // System.out.println(ival); *error Webtest ex1 = new Webtest(); Webtest ex2 = new Webtest(); ex1.ival = 456; System.out.println(ex1.ival); System.out.println(ex2.ival); } }
// 실행 결과 123 456 321
이 예제에서 주석 처리된 부분은 에러가 나는 코드이다. 인스턴스 변수인 ival은 인스턴스 없이 접근할 수 없기 때문이다. 또한 ex1과 ex2의 출력 차이를 통해 저장공간이 공유되지 않음을 알 수 있다.[3]
맴버 메소드
- C언어의 함수와 비슷하다.
- 데이터 처리 기능을 구현한다.
- 리턴값이 없는 메소드는 void 형을 지정한다.
- 메소드가 받는 인수의 데이터 타입은 메소드를 호출하는 쪽과 일치해야 한다.
- Method Overloading(중복 정의), Overriding(재정의)기술로 확장된다.
- 메소드가 리턴하는 값과 리턴되는 값의 데이터 타입은 일치해야 한다.
각주
- ↑ <클래스 맴버와 인스턴스 맴버><<공동공부>>,2013-12-04
- ↑ <맴버변수 지역변수 전역변수><<쉽고 친절한 프로그래밍>>,2017-04-30
- ↑ <맴버변수 : 클래스변수, 인스턴스변수><<무무위키>>,2016-08-03
참고 자료
- <클래스 맴버와 인스턴스 맴버><<공동공부>>,2013-12-04
- <맴버변수 지역변수 전역변수><<쉽고 친절한 프로그래밍>>,2017-04-30
- <맴버변수:클래스변수, 인스턴스변수><<무무위키>>,2016-08-03