맴버(member)는 영어로 구성원이라는 뜻이다. 객체도 구성원이 있는데 아래와 같다.
- 변수
- 메소드
객체를 만들기 위해서는 우선 클래스를 정의하고, 클래스에 따른 인스턴스를 만들었다.
이전에 봤던 예제에서 CalculatorDemo.java에서 left와 right 변수는 인스턴스의 맴버다.
인스턴스를 만들어야 사용할 수 있었고, 인스턴스마다 서로 다른 값을 가지고 있었다.
그렇다면 클래스도 멤버(변수,메소드)를 가질 수 있는가? 정답은 가질 수 있다.
11-1. 클래스 멤버란?
- 클레스 = 설계도
1. 클래스 변수란
클래스에 변수를 설정하는 방법은 기존과 동일한 방식에서 앞에 "static" 만 붙이면 된다.
static int base = 50; 로 정의하면, 클래스 변수이기 때문에 모든 인스턴스가 똑같은 값을 공유한다는 틋징이 있어,
80 /40 /110 /55이 출력이 된다.
하지만 int left, right; 은 클래스의 변수가 아닌 인스턴스의 변수이며 인스턴스마다 다른 값을 가지고 있기에,
아래와 같이 표출되는 것이다.
10 + 20 + 50 = 80
(10 + 20 + 50) / 2 = 40
다시 36행에서 변수의 값을 10으로 지정했기에, Calculator.base=10; 아래부터는 40 / 70이 출력되는 것이다.
2. 클래스 메소드란?
기존에는 Calculator 인스턴스를 만들었으며, left right 값을 setOperands메소드에 호출해서 정하고, sum /avg 메소드를 인자 없이 호출해서 left right 변수에 저장되어 있는 값을 호출해 왔다.
이번 예제는 인스턴스 값이 존재하지 않는다.
CalculatorDemo3.sum(10,20); > 10, 20인자를 넣어 30이 출력된다.
예제에서는 인스턴스가 등장하지 않았지만, 클래스에 직접 접근해서 sum /avg 메소드를 호출하고 있는 점을 주목하자.
클래스에 메소드를 설정하는 방법은 기존과 동일한 방식에서 앞에 "static" 만 붙이면 된다.
public static void sum(int left, int right) 로 정의하면, sum이라는 메소드는 클래스 메소드가 되며, 인자값으로 left, right 값을 주면 계산한 결과를 화면에 출력이 된다.
1. 인스턴스 메소드는 클래스멤버에 접근할 수 있다.
ㄴ 인스턴스 메소드가 있다면 클래스가 있다는 것이기에 가능하다.
2. 클래스 메소드는 인스턴스 멤버에 접근할 수 없다.
ㄴ 클래스는 인스턴스 보다 먼저 존재한다. 왜냐 클래스를 먼저 만들고 클래스(설계도)도 따라 인스턴스(구체적인 제품)를 나중에 만들기에 만들어지지 않는 인스턴스 멤버에 당연히 접근이 어렵다.
'ON > 국비 전 독학' 카테고리의 다른 글
[복습] 2. 객체지향에 대해서 공부하기 : 클래스 , 객체 (0) | 2023.03.29 |
---|---|
[복습] 1. 객체지향을 다시 공부해보자. (0) | 2023.03.27 |
10. 클래스와 인스턴스 그리고 객체란? (0) | 2023.03.25 |
09.객체 지향 프로그래밍이란 ? (0) | 2023.03.24 |
[복습] 반복문으로 구구단을 만들자 (0) | 2023.03.21 |