- 변수와 메서드
1. 선언위치에 따른 변수의 종류
- 변수의 종류
① 인스턴스변수(클래스 영역) - 인스턴스가 생성되었을 때
: 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값
인스턴스마다 고유한 상태를 유지해야하는 속성의 경우 선언
ex) 아이폰12 mini의 경우, 크기는 모두 같아야하지만 색상은 흰, 검, 연두....다양하며, 유저 또한 다름
② 클래스변수(클래스 영역) - 클래스가 필요할 때 만듦
: 인스턴스 앞에 'static'을 붙이면 선언 가능
클래스변수는 모든 인스턴스가 공통된 저장공간(변수)를 공유
한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우, 클래스 변수로 선언
ex) 아이폰12 mini의 경우, 크기는 모두 같아야함 이때 크기는 클래스 변수로 선언
** 인스턴스 변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만,
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 공통값 가짐.
③ 지역변수(클래스 외 영역) - 변수 선언문이 수행되었을 때
: 매서드 내에 선언되어 메서드 내에서만 사용 가능, 메소드 종료시 자동 소멸
2. 클래스 변수와 인스턴스 변수
- 예제(자바의 정석Ex6_5 변형)
: 맥북에어를 사용하는 두사람이 있다.
고정 값은 모델명 'air'와 무게 1.3 으로 일치 --> class variable
하지만 사용자나 색상은 다름 --> instance variable
class MacBook {
public static void main(String[] args){
System.out.println("Mac.model : " + Mac.model);
System.out.println("Mac.weight : " + Mac.weight);
Mac m1 = new Mac();
m1.color = "silver";
m1.user_name = "haheaven";
Mac m2 = new Mac();
m2.color = "black";
m2.user_name = "hahaha";
System.out.printf("m1의 color는 %s이고, user_name은 %s이다.%n", m1.color, m1.user_name);
System.out.printf("m2의 color는 %s이고, user_name은 %s이다.%n", m2.color, m2.user_name);
System.out.println("Mac의 모델을 변경합니다.");
Mac.model = "pro";
System.out.printf("m1의 model은 %s이다.%n", m1.model); //참조변수(c1)을 통해서도 호출 가능
System.out.printf("m2의 model은 %s이다.%n", Mac.model);
//참조변수보다 클래스이름으로 호출하면 model변수가 클래스변수임을 확인할 수 있기 때문에 클래스이름으로 호출하는 것이 좋다!
}
}
class Mac {
//인스턴스변수
String color;
String user_name;
//클래스변수 ===> 공통적인 속성의 경우 static + 인스턴스변수로 선언
static String model = "air";
static double weight = 1.3;
}
* 위의 코드를 그림으로 과정을 살펴보면 ,
3. 메서드
: 특정 작업을 수행하는 일련의 문장들으 하나로 묶은 것(작업단위 문장 묶는 것)
: 입력 - > 출력을 통해 필요한 값 넣고 결과 얻는 과정
- 메서드 사용이유
① 높은 재사용성 : API에서 제공하는 메서드 사용하면서 한 번 만들어 놓은 메서드를 호출 가능
② 중복코드 제거 : 반복되는 코드를 하나의 메서드로 작성해 놓으면 메서드 호출로 대신 가능
③ 프로그램의 구조화 : 큰 프로그램 만들시 단위별로 나눠 프로그램 구조를 단순화함
- 관련 개념
① 매개변수(parameter) : 메서드가 작업을 수행하는데 필요한 값들을 제공받기 위한 것
② 메서드 이름 : 메서드의 기능을 알 수 있도록 의미 함축하기
③ 반환타입 : 출력결과 반환값 타입을 적어야하는데 반환값이 없는 경우에는 'void' 를 적어야함
④ 메서드의 몸통 {} : 메서드를 호출했을 때 수행될 문장
⑤ return 문 : 'void'가 아닌 경우 메서드 몸통{}안에 return 반환값이 존재해야함
⑥ 지역변수 : 매서드 내에 선언된 변수들은 그 메서드 내에서만 사용 가능
add()와 divide() 에서 매개변수 x,y가 같지만 각 다른 메서드이기 때문에 이름이 같아도 상관없음(다른 변수니까)
int add(int x, int y) {
return x+y;
}
int divide(int x, int y){
return x/y;
}
- 메소드 관련 예제(자바의정석 Ex6_6 변형)
class Calculator{
public static void main(String[] args){
// c1 객체 생성
Calculator c1 = new Calculator();
int result1 = c1.add(7,3);
int result2 = c1.subtract(7,3);
int result3 = c1.multiply(7,3);
double result4 = c1.divide(7,3);
System.out.println("c1.add : " + result1);
System.out.println("c1.subtract : " + result2);
System.out.println("c1.multiply : " + result3);
System.out.println("c1.divide : " + result4);
}
}
// 클래스 생성
class Calculator {
// 지역변수
int x;
int y;
//더하기 메소드
int add(int x, int y){
return x+y;
}
//빼기 메서드
int subtract(int x, int y) { return x-y; }
//곱하기 메서드
int multiply(int x, int y) { return x*y; }
//나누기 메서드
double divide(double x, double y) { return x/y; }
그림으로 나타내면
참고 : 자바의 정석(남궁성)
'JAVA' 카테고리의 다른 글
JAVA_객체지향(매개변수, 메서드 구분 ) (0) | 2021.07.28 |
---|---|
JAVA_JVM 메모리 구조 (0) | 2021.07.28 |
JAVA_객체지향 프로그래밍1(OOP, 클래스, 객체, 인스턴스) (0) | 2021.07.28 |
JAVA_배열(String 배열, 다차원배열) 2 (0) | 2021.07.27 |
JAVA_배열(Array) 1 (0) | 2021.07.27 |
댓글