Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링 mvc2 - 검증
- 자바의 정석 기초편 ch8
- 자바의 정석 기초편 ch6
- 자바의 정석 기초편 ch1
- 자바의 정석 기초편 ch3
- 2024 정보처리기사 수제비 실기
- 코드로 시작하는 자바 첫걸음
- jpa 활용2 - api 개발 고급
- 자바의 정석 기초편 ch9
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch11
- 타임리프 - 기본기능
- 스프링 db2 - 데이터 접근 기술
- 스프링 mvc2 - 로그인 처리
- jpa - 객체지향 쿼리 언어
- 자바의 정석 기초편 ch13
- 스프링 고급 - 스프링 aop
- @Aspect
- 2024 정보처리기사 시나공 필기
- 자바의 정석 기초편 ch14
- 스프링 입문(무료)
- 스프링 db1 - 스프링과 문제 해결
- 게시글 목록 api
- 자바의 정석 기초편 ch12
- 자바의 정석 기초편 ch4
- 자바의 정석 기초편 ch7
- 자바의 정석 기초편 ch2
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch5
- 스프링 mvc2 - 타임리프
Archives
- Today
- Total
나구리의 개발공부기록
자바의 정석 기초편 ch6 - 23 ~ 25[기본형매개변수, 참조형매개변수, 참조형 반환타입] 본문
유튜브 공부/JAVA의 정석 기초편(유튜브)
자바의 정석 기초편 ch6 - 23 ~ 25[기본형매개변수, 참조형매개변수, 참조형 반환타입]
소소한나구리 2023. 11. 16. 20:291) 기본형 매개변수
- 변수의 값을 읽기만 할 수 있음 - read only
- 플래시 동영상 - PrimitiveParam.exe 참조
class Data { int x; }
class ex6_6 {
public static void main(String[] args) {
Data d = new Data(); // 객체 생성
d.x = 10; // 참조변수 d가 가리키는 값을 10으로 변경
System.out.println("main() : x = " + d.x); // main()x의 값은 10
change(d.x); // (d.x)의 값(현재 10)을 입력한 change메서드호출
System.out.println("After change(d.x)");
System.out.println("main() : x = " + d.x); // 여전히 main() x의 값은 10
}
static void change(int x) { // 기본형 매개변수
x = 1000; // change메서드의 지역변수 x에 1000을 저장
System.out.println("change() : x = " + x); // change()x의 값은 1000
} // 메서드 종료 후 호출한 값으로 이동 (스택에서 사라짐,change 메서드의 지역변수 x도 함께 사라짐)
}
출력값
main() : x = 10
change() : x = 1000
After change(d.x)
main() : x = 10
(1) 프로그램 동작 설명
- Data 클래스의 인스턴스 변수 x 생성
- main 메서드가 실행되어 호출 스택에 쌓이고 Data() 객체를 생성하여 참조를 변수 d에 저장(d를 가리킴)
- d.x로 변수를 사용하여 d가 가리키는 x 변수에 10을 입력
- static 메서드인 change()에 d.x를 인자로 입력하고 호출하여 메서드를 실행하면 호출 스택에 쌓이게 되고 인자로 전달받은 d.x의 값이 change 메서드의 매개변수 x에 복사가 됨
- change 메서드 내부의 코드가 수행되어 지역변수인 x의 값을 1000으로 변경
- change 메서드가 종료되고 호출스택에서 삭제하여 main 메서드로 복귀
- main 메서드의 나머지 코드를 수행하여 참조변수 d가 가리키는 변수 x의값 10을 출력하고 main메서드가 종료되어 호출스택에서 제거됨
2) 참조형 매개변수
- 매개변수의 타입은 기본형이 아니면 참조형임
- 참조형 매개변수는 변수의 값을 읽고 변경 할 수 있음 - read and write
- 객체를 다룰 수 있는 주소(참조) 자체를 매개변수로 복사하기 때문에 가능함
- 플래시 동영상 - ReferenceParam.exe 참조
class Data2 { int x; } // 멤버가 1개
class ex6_7 {
public static void main(String[] args) {
Data2 d = new Data2(); // 객체생성
d.x = 10; // 참조변수 d가 가리키는 x에 10을 저장
System.out.println("main() : x = " + d.x);
change(d); // 참조변수 d 값을 입력한 change 메서드 호출
System.out.println("After change(d)");
System.out.println("main() : x = " + d.x); // main() x의 값이 1000으로 변경 됨
}
// 객체의 주소 자체를 매개변수에 복사해서 값을 변경할 수 있음 => 읽고 쓰는것이 가능해짐!!
static void change(Data2 d) { // 참조형 매개변수 = 기본형이 아니면 참조형
d.x = 1000; // 참조변수 d가 가리키는 x에 1000을 저장 -> d의값이 변경 됨.
System.out.println("change() : x = " + d.x); // change() x의 값은 1000
}
}
출력값
main() : x = 10
change() : x = 1000
After change(d)
main() : x = 1000
(1) 프로그램 동작 설명
- Data2 클래스의 인스턴스 변수 x 생성
- main 메서드가 실행되어 호출 스택에 쌓이고 Data2() 객체를 생성하여 참조를 변수 d에 저장(d를 가리킴)
- d.x로 변수를 사용하여 d가 가리키는 x 변수에 10을 입력
- static 메서드인 change()에 참조변수 자체를 인자로 입력하고 메서드를 호출하여 실행하면 호출스택에 쌓이게 되고, change의 매개변수인 Data2타입의 d변수에 인자로 받은 참조값(주소값)을 저장함, 즉 change의 파라미터가 Data2객체를 가리킴
- change 메서드 내부의 코드가 수행되어 d.x로 참조변수 d가 가리키는 변수 x의 값을 1000으로 변경
- change 메서드가 종료되고 호출스택에서 삭제하여 main 메서드로 복귀
- main 메서드의 나머지 코드를 수행하여 참조변수 d가 가리키는 변수 x의값 1000을 출력하고 main메서드가 종료되어 호출스택에서 제거됨 - change 메서드 호출 결과로 Data()객체의 변수의 값이 변경되었음
3) 참조형 반환타입
- 반환타입이 참조형일 경우 객체의 주소를 반환함
- 객체의 주소(참조값)는 정수타입(int)임
class Data3 { int x; }
class ex6_8 {
public static void main(String[] args) {
Data3 d = new Data3();
d.x = 10 ; // 참조변수 d가 가리키는 x에 10을 저장
Data3 d2 = copy(d);
// 참조변수 d를 복사한 copy메서드 호출하여 실행 값(주소)를 참조변수 d2에 반환
System.out.println("d.x ="+d.x);
System.out.println("d2.x="+d2.x);
}
static Data3 copy(Data3 d) {
Data3 tmp = new Data3(); // 새로운 객체 tmp를 생성
tmp.x = d.x; // d.x의 값을 tmp.x에 복사
return tmp; // 복사한 객체의 주소를 반환
// 반환 타입이 참조형일 경우 객체의 주소가 반환 됨
}
}
출력결과
d.x =10
d2.x=10
(1) 프로그램 동작 설명
- Data3 클래스의 인스턴스 변수 x 생성
- main 메서드가 실행되어 호출 스택에 쌓이고 Data3() 객체를 생성하여 참조를 변수 d에 저장(d를 가리킴)
- d.x로 변수를 사용하여 d가 가리키는 x 변수에 10을 입력
- static 메서드인 copy()에 참조변수 자체를 인자로 입력하여 메서드를 호출하여 실행하면 호출스택에 쌓이게 되고, copy의 매개변수인 Data3타입의 d변수에 인자로 받은 참조값(주소값)을 저장함
- copy 메서드 내부의 코드가 수행되어 Data3객체를 새로 생성하여 tmp 변수에 참조값을 저장하고 d.x의 값을 tmp.x의 값으로 복사
- 반환값으로 새로생성 된 tmp 변수의 참조값을 반환하여 d2라는 변수에 반환 된 참조값을 저장
- copy 메서드가 종료되고 호출스택에서 삭제하여 main 메서드로 복귀
- main 메서드의 나머지 코드를 수행하여 참조변수 d가 가리키는 변수 x의값 10과 d2가 가리키는 변수 x의값 10(메서드로 복사 된 값)을 출력하고 main메서드가 종료되어 호출스택에서 제거됨
4) 위 예제들의 static 메서드 호출시 할 때 참조변수가 없는 이유
- 메서드가 같은 클래스에 있으면 참조변수 생략가능
- static메서드는 객체 생성없이 호출 가능하여 클래스 이름으로 호출할 수 있음
- 만약 다른 클래스에 copy() 메서드가 정의되어 있었다면 해당 클래스의 객체를 생성 후 반환 된 참조변수로 호출해야함.
- Copy e = new Copy();
- e.copy()
** 출처 : 남궁성의 정석코딩_자바의정석
'유튜브 공부 > JAVA의 정석 기초편(유튜브)' 카테고리의 다른 글
자바의 정석 기초편 ch6 - 32 ~ 41[생성자, 기본 생성자,생성자this(), 참조변수 this, 변수의초기화, 멤버변수의 초기화] (1) | 2023.11.20 |
---|---|
자바의 정석 기초편 ch6 - 26 ~ 31[static메서드와 인스턴스 메서드, 오버로딩] (0) | 2023.11.17 |
자바의 정석 기초편 ch6 - 20 ~ 22[return문, 반환값,호출스택] (0) | 2023.11.16 |
자바의 정석 기초편 ch6 - 14 ~ 19[메서드란? 메서드의 선언부와 구현부, 메서드호출,메서드의 실행 흐름] (0) | 2023.11.15 |
자바의 정석 기초편 ch6 - 9 ~ 13[클래스의 정의,선언위치변수종류,클래스변수,인스턴스변수] (0) | 2023.11.15 |