[자바의 정석] 기본형/참조형 매개변수, 참조형 반환타입

2023. 9. 20. 12:50·📝 끄적끄적/🖥️ 자바의 정석

기본형 매개변수

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;
		System.out.println("change() : x = " + x);
	}
}

//결과
//main() : x = 10
//change() : x = 1000
//After change(d.x)
//main() : x = 10

 

기본형 매개변수라 읽기만 가능하다.

→ 값을 바꿀 수가 없다.

참조형 매개변수

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); //main() : x = 10

		change(d);
		System.out.println("After change(d)"); //After change(d)
		System.out.println("main() : x = " + d.x); //main() : x = 1000

	}

	static void change(Data d) { // 참조형 매개변수
		d.x = 1000; //**
		System.out.println("change() : x = " + d.x); //change() : x = 1000
	}
}

change(d) - 객체 값을 준 게 아니라 객체 자체를 줘버림. = 객체 주소를 줌

→ 받은 객체 멤버변수의 값을 읽고 변경할 수도 있다.

 

❓change(d)가 가능한 이유
copy()가 static이어서, 같은 클래스 내에 있어서 메서드 이름만으로 호출가능

→ 원래는 객체 생성하고 객체. copy();로 호출해야 한다.

참조형 반환타입

class Data3 { int x; }

class ReferenceReturnEx {
	public static void main(String[] args) 
	{
		Data3 d = new Data3();
		d.x = 10;

		Data3 d2 = copy(d);
		System.out.println("d.x = " + d.x); //d.x = 10
		System.out.println("d2.x = " + d2.x); //d2.x = 10
	}

	static Data3 copy(Data3 d) {
		Data3 tmp = new Data3(); // 새로운 객체 tmp를 생성한다.
		tmp.x = d.x; //d.x의 값을 tmp.x에 복사한다.

		return tmp; //복사한 객체의 주소를 반환한다.
	}
}

 참조형을 반환한다는 것은 객체의 주소를 반환한다는 것이다.

객체 주소는 그냥 정수다. = int

개념적으로 어려울 뿐, 익숙하지 않아서다.

저작자표시 비영리 (새창열림)

'📝 끄적끄적 > 🖥️ 자바의 정석' 카테고리의 다른 글

[자바의 정석] 제어자, 캡슐화  (0) 2023.09.24
[자바의 정석] 상속, 참조변수 super, 생성자 super()  (0) 2023.09.23
[자바의 정석] 생성자, 변수/멤버 변수의 초기화  (0) 2023.09.22
[자바의 정석] static 메서드와 인스턴스 메서드, 오버로딩  (0) 2023.09.21
[자바의 정석] 클래스 변수와 인스턴스 변수, 호출스택  (0) 2023.09.19
[자바의 정석] 클래스와 객체  (0) 2023.09.17
'📝 끄적끄적/🖥️ 자바의 정석' 카테고리의 다른 글
  • [자바의 정석] 생성자, 변수/멤버 변수의 초기화
  • [자바의 정석] static 메서드와 인스턴스 메서드, 오버로딩
  • [자바의 정석] 클래스 변수와 인스턴스 변수, 호출스택
  • [자바의 정석] 클래스와 객체
현주먹
현주먹
끄적끄적 개발.log
  • 현주먹
    현주먹의 개발로그
    현주먹
  • 전체
    오늘
    어제
    • 전체글 (162)
      • 👶🏻 CS (15)
        • Operating System (8)
        • Database (4)
        • Data Structure (2)
        • Software Engineering (1)
      • 💻 Dev (54)
        • Java & OOP (24)
        • Spring (4)
        • JPA (5)
        • Test Code (1)
        • Database (1)
        • JSP & Servlet (13)
        • Etc (6)
      • 💡 Algorithm (25)
        • 인프런 (9)
        • 백준 (16)
      • 🛠 DevOps & Tool (11)
        • Linux (4)
        • AWS (1)
        • Git (2)
        • Etc (4)
      • 📝 끄적끄적 (57)
        • 후기 및 회고 (5)
        • TDD, 클린 코드 with Java 17기 (3)
        • F-Lab (23)
        • 🖥️ 자바의 정석 (11)
        • 📖 Clean Code (3)
        • 항해99 코테 스터디 (11)
  • 블로그 메뉴

    • 🐈‍⬛ GitHub
    • TIL
  • 인기 글

  • 태그

    til
    에프랩
    ==와 equals()
    티스토리챌린지
    인프런 특정문자뒤집기
    NextSTEP
    개발자취업
    TDD 클린 코드 with Java
    자바의정석
    f-lab 후기
    코테스터디
    자바의신절판
    로또 미션
    인프런 단어뒤집기
    PostGreSQL함수
    JPA
    jsp
    에프랩 후기
    오블완
    개발자멘토링
    오라클
    F-Lab
    객체지향
    99클럽
    코딩테스트준비
    C
    백준
    항해99
    백준10250
    데브클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
현주먹
[자바의 정석] 기본형/참조형 매개변수, 참조형 반환타입
상단으로

티스토리툴바