JAVA의 정석 강의를 들으며 공부하며 정리했습니다. 너무 자잘한 내용은 안적었습니다.
[자바의 정석 - 기초편] ch6-23 기본형 매개변수
- 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only) 여기서 말하는 기본형은 다음 8개의 변수를 말함. int, float, char, String, byte, boolean, double, long
- 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read & write)
class Data { int x; }
class PrimitiveParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d.x); // 값 자체를 전달해줌
System.out.println("After change(d.x)");
System.out.println("main() : x = " + d.x);
}
static void change(int x) { // 기본형 매개변수
x = 1000; // 지역변수라서 실제 d.x의 값은 변하지 않음.
System.out.println("change() : x = " + x);
}
}
한마디로, 메소드의 매개변수 값을 재할당 해도 그것은 지역변수이기 때문에 메소드 실행이 끝나면 사라지고, 할당된 값 또한 지역변수에 할당한 값이라 함수 밖에서는 영향이 없다.
[자바의 정석 - 기초편] ch6-24 참조형 매개변수
class Data { int x; }
class ReferenceParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d); // 객체 자체를 전달해줌
System.out.println("After change(d)");
System.out.println("main() : x = " + d.x);
}
static void change(Data d) { // Data라는 참조형 매개변수로 받아서 객체 d를 받음.
d.x = 1000; // 객체를 받아오고 그 값을 바꾸는 거라, 아까랑은 다르게 d.x가 바뀜
System.out.println("change() : x = " + d.x);
}
}
[자바의 정석 - 기초편] ch6-25 참조형 반환타입
반환타입이 참조형이라는 것은 복사한 객체의 주소를 반환한다는 것이다.
class Data { int x; }
class ReferenceReturnEx {
public static void main(String[] args)
{
Data d = new Data();
d.x = 10;
Data d2 = copy(d); // copy함수의 return type이 Data라서 d2에 할당할 수 있다.
System.out.println("d.x ="+d.x); // 10
System.out.println("d2.x="+d2.x); // 10
}
static Data copy(Data d) { // 반환타입이 Data라는 참조형
Data tmp = new Data(); // return type을 Data로 맞춰준 것.
tmp.x = d.x;
return tmp;
}
}
[자바의 정석 - 기초편] ch6-26~29 static메서드와 인스턴스 메서드
인스턴스 메소드 | static 메소드 | |
호출 방법 | 인스턴스 생성 후, 참조변수.메소드이름() | 객체 생성 없이, 클래스이름.메소드이름() ex) Math.random()은 객체생성 없이도 사용함. |
관련 멤버 | 인스턴스 변수, 인스턴스 메소드과 관련있는 작업을 한다. | 인스턴스 변수, 인스턴스 메소드과 관련없는 작업을 한다. |
iv 사용 여부 | 메소드 내에서 iv 사용 가능하고 스테틱 메소드는 언제나 호출 가능. | static 메소드 내에서 iv 사용 불가능. |
인스턴스 변수 사용 여부로 두 메소드의 역할이 갈린다. 그래서, 언제 메소드에 static을 붙여주느냐? → iv를 사용하지 않는 경우에. |
Q. 왜 static 메소드에서는 인스턴스 변수를 사용하지 못할까?
static 메소드는 언제나 호출해서 사용 가능해야하는 메소드인데, iv는 객체가 있을 때만 사용이 가능함. 근데 스테틱 메소드 호출했는데 객체가 생성되지 않았을 수 있으니 항상 쓸 수 있다는 스테틱 메소드에 제약이 생겨버림. 그래서 static 메소드 내에서는 iv를 사용 못함. → 자연스럽게 인스턴스 메소드 또한 호출 불가능. im은 iv를 가지고 작업하는 메소드이기 때문에 iv와 연관되는 im도 스테틱 메소드에서 사용이 불가능하다.
반응형
'프로그래밍 문법 > Java' 카테고리의 다른 글
6장 객체지향 (5) 오버로딩 , 생성자 , this , this() , 변수 초기화 (0) | 2024.03.10 |
---|---|
6장 객체지향 (3) 메소드 , 호출스택 (0) | 2024.03.10 |
6장 객체지향 (2) 클래스변수 , 인스턴스변수 (0) | 2024.03.10 |
6장 객체지향 (1) 객체 , 클래스 (0) | 2024.03.10 |
Java 연산자 (0) | 2024.01.07 |