ki-sd 님의 블로그
[2026-03-19] 생성자 설계와 파라미터 전달 방식 (Call by Value/Reference) 본문
객체가 메모리에 태어나는 순간을 제어하는 생성자와, 메서드 간에 데이터를 주고받는 방식의 이면에 숨겨진 메모리 동작을 파고들었다.
1. 생성자(Constructor)의 역할과 오버로딩
- 생성자: new 키워드로 객체를 생성할 때 가장 먼저 호출되어, 인스턴스 변수들의 값을 초기화하는 특별한 메서드다. 클래스 이름과 동일해야 하며 반환 타입이 존재하지 않는다.
- 개발자가 생성자를 하나도 작성하지 않으면 컴파일러가 빈 껍데기인 '기본 생성자(Default Constructor)'를 몰래 넣어주지만, 매개변수가 있는 생성자를 단 하나라도 작성하면 기본 생성자는 자동 생성되지 않는다는 중요한 규칙을 확인했다.
- 생성자 오버로딩(Overloading): 매개변수의 개수나 타입을 다르게 하여 여러 개의 생성자를 정의함으로써, 객체를 다양한 초기 상태로 유연하게 생성할 수 있는 기법을 실습했다.
2. 데이터 전달 방식에 따른 사이드 이펙트
- 메서드의 매개변수로 인자를 넘길 때, 자바는 근본적으로 변수가 가진 '값'을 복사해서 전달한다.
- 기본형 전달 (Call by Value): 실제 데이터 값을 복사하여 넘기므로, 메서드 내부에서 값을 변경해도 원본 변수에는 아무런 영향을 주지 않는다.
- 참조형 전달 (Call by Reference): 객체나 배열을 넘길 경우, 실제 데이터가 아닌 힙 메모리의 '주소값'이 복사되어 전달된다. 이로 인해 메서드 내부에서 해당 주소로 접근해 데이터를 수정하면, **원본 데이터 자체가 함께 변경되는 사이드 이펙트(Side Effect)**가 발생한다.
- 이러한 참조 전달의 특성을 명확히 인지하고, 의도치 않은 원본 데이터 훼손을 막기 위해 신중하게 데이터를 핸들링하는 방식을 배웠다.
'JavaStudy' 카테고리의 다른 글
| [2026-03-23] 상속(Inheritance)과 포함(Composition)의 설계 철학 (0) | 2026.04.13 |
|---|---|
| [2026-03-20] 캡슐화(Encapsulation)와 데이터 은닉화 (0) | 2026.04.13 |
| [2026-03-18] 객체 지향 프로그래밍(OOP)의 기초 아키텍처 (0) | 2026.04.13 |
| [2026-03-17] String 클래스의 특수성과 불변성(Immutable) (0) | 2026.04.13 |
| [2026-03-16] 메모리 영역과 static 키워드의 메커니즘 (0) | 2026.04.13 |
