2025.01.11 (토) / 참조 변수
클래스에서 다른 클래스의 필드값들이나 메소드를 가져오고 싶을 때 우리는 이런 식으로 코드를 작성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
package practiceforfun;
public class Run {
public static void main(String[] args) {
// TODO Auto-generated method stub
MemberMenu mm = new MemberMenu();
mm.mainMenu();
}
}
|
cs |
MemberMenu 라는 클래스에서 mm 참조변수를 생성하여, MemberMenu() 로 생성된 객체를 new 가 힙 영역 메모리로 넣어주고, 그 주소값을 반환합니다. 그리고 여기서 반환된 주소값은 참조변수 mm 에 저장됩니다.
저희가 이런식으로 코드를 작성하는 이유는 간단합니다. 실제 프로젝트를 진행하다 보면 코드의 줄이 엄청 길어집니다.
짧으면 몇천줄 길면 몇만줄 이런식으로 넘어갈텐데, 그 때마다 매번 적어야 하는 코드를 반복해서 쓰게 된다면 가독성이나 유지보수성이 떨어지게 될 것 입니다. 저번에 클래스와 객체 게시글에서 적은 것 처럼, 우리는 최대한 코드를 간결하고 깔끔하게 적어야 합니다. 그래야 보는 사람도 편하고, 수정해야 할 사람도 편해지기 때문입니다.
이 때문에 저희는 객체를 생성하는 것 입니다. 객체를 생성할 때는 필요한 준비물들이 있는데, 바로 가져올 클래스와 참조변수입니다.
1. 참조변수의 특징
- 참조변수는 특정 객체의 필드 값과 메소드에 접근하기 위해 사용됩니다.
- 객체 지향 프로그래밍에서 필드나 메소드를 직접 사용하는 대신 참조 변수를 통해 간접적으로 접근함으로써 캡슐화를 유지하고 코드의 유연성을 높일 수 있습니다.
- 또한, 다형성과 재사용성을 구현하는 데 중요한 역할을 합니다.
- 간단하게 객체와 상호작용하기 위한 다리 역할을 한다고 생각하면 됩니다.
2. 참조변수의 제한
- 참조변수를 사용하고 싶어도, 가져오려는 필드의 메소드의 접근제한자에 따라 사용할 수 있는 범위가 정해집니다.
- public : 모든 클래스에서 접근 가능
- protected : 같은 패키지 또는 상속 관계에 있는 클래스에서 접근 가능
- default : 같은 패키지에서만 접근 가능
- private : 해당 클래스 내에서만 접근 가능 (getter, setter 메소드를 사용하면 다른 클래스에서 필드 값의 읽기 쓰기 가능함)
3. 참조 변수를 사용하는 이유
- 다른 클래스의 필드나 메소드를 쉽게 호출하여 중복 코드를 줄일 수 있습니다.
- 참조 변수는 객체의 타입에 따라 다양한 동작을 수행할 수 있습니다.
- 참조 변수를 통해 객체의 상태(필드값)와 동작(메소드 호출)을 제어할 수 있습니다.
- 다른 클래스의 필드나 메소드에 접근하기 위해 참조변수를 사용하는 이유는 캡슐화와 관련이 있습니다.
- 객체 외부에서는 참조 변수를 통해서만 다른 클래스의 필드나 메소드에 접근할 수 있습니다.
- 클래스 내부의 데이터(필드)는 숨기고, 필요한 경우에만 참조 변수를 통해 안전하게 접근할 수 있습니다.
아래에 2가지 이유는 캡슐화와 내용이 정말 비슷하죠? 캡슐화는 이 처럼 자바에 있는 여러가지 기능과 긴밀하게 연결되어 있습니다. 아래 링크는 캡슐화에 대한 내용입니다.
https://nikihwangg.tistory.com/29