뚜껑뚜
Magnolia
뚜껑뚜
전체 방문자
오늘
어제
  • 분류 전체보기 (37)
    • 웹 개발 (7)
      • Java (5)
      • Spring (0)
      • JPA (0)
      • JavaScript (1)
      • jQuery (1)
      • Mustache (0)
      • MyBatis (0)
    • DB (0)
    • CS (1)
      • HTTP (0)
      • etc (1)
    • 오류 로그 (20)
    • ETC (8)
    • 백엔드 로드맵 (0)
    • 개인 프로젝트 (1)
      • XYAB (1)
    • Diary (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 서블릿
  • 스레드
  • Thymeleaf
  • HTTP
  • 자바스크립트
  • get
  • 프로젝트
  • post
  • URI
  • View
  • jquery
  • 컨트롤러
  • 어댑터
  • Servlet
  • 인텔리제이
  • 타임리프
  • 로그인
  • JPA
  • MVC
  • 헤더

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뚜껑뚜

Magnolia

웹 개발/Java

Call by Value

2025. 11. 25. 23:09

자바는 항상 변수의 값을 복사해서 대입한다.

int num1 = 5;
int num2 = num1;

여기서 num2 = num1 이 부분이 값을 복사해서 대입하는 거임. num1이라는 변수 자체가 num2에 들어가는 게 아니라, num1의 값을 읽어서 num2에 복사해서 대입하는 거임. 그래서 num1과 num2는 관계가 없음.

 

자바는 항상 변수의 값을 복사해서 대입한다... 참조형도 마찬가지라면 이관할 때 특정 객체를 인자로 해서 메서드를 호출하고 나면 호출 시 인자로 넘긴 객체의 값이 메서드 호출 후에 변경되는 건 대체 뭐지???

지피티가 알려줌

 

메서드의 파라미터가 참조형 객체일 경우 파라미터에 인자로 넘긴 객체의 주소값이 들어옴.
해당 주소 값 자체를 복사하는 것.

void changeName(User user) {
	user.setName("홍길동");
}

User u = new User("철수");
changeName(u);
System.out.println(u.getName()); // -> 홍길동 출력됨.

즉 changeName 메서드의 파라미터인 user에는 메서드 호출 시 인자로 넘긴 u 변수의 주소값이 들어와 있음. 그래서 u와 user 변수가 같은 주소값, 즉 같은 객체(u)를 참조하고 있는 거임. 그래서 changeName에서 user의 name을 변경하면 u의 name도 변경되는 것. 같은 주소를 참조하고 있으니까.

하지만 메서드 안에서 참조 자체를 다른 객체로 바꿔도 원본 참조는 절대 바뀌지 않는다.

void change(User user) {
	user = new User("영희");
}

User u = new User("철수");
change(u);
System.out.println(u.getName()); // -> 철수 출력

원래 u의 주소값을 user에 복사한 거였는데 user 변수에다가 User 객체를 새로 초기화했으니까. 주소값이 달라짐. 그래서 u의 name은 변경되지 않은 것.

저작자표시 (새창열림)

'웹 개발 > Java' 카테고리의 다른 글

List와 객체지향  (0) 2025.12.09
자바 다이아몬드 연산자(<>): 타입 명시와 타입 추론  (0) 2025.12.09
접근제어자와 캡슐화  (0) 2025.12.05
생성자  (0) 2025.12.04
    '웹 개발/Java' 카테고리의 다른 글
    • List와 객체지향
    • 자바 다이아몬드 연산자(<>): 타입 명시와 타입 추론
    • 접근제어자와 캡슐화
    • 생성자
    뚜껑뚜
    뚜껑뚜

    티스토리툴바