인프런 커뮤니티 질문&답변

이승현님의 프로필 이미지
이승현

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

Java언어 기출문제의 변형

26분 메서드 오버로딩 (같은 이름, 다른 매개변수) 질문!!

해결된 질문

작성

·

39

0

안녕하세요. 선생님, 26분 16초 메서드 오버로딩 질문있습니다.

HelloWorld 클래스에서

String s1 = Hello, World!

String s2= Java

로 초기화하고 SP클래스에서 s1과 s2를 인자로 받아 새로운 값을 리턴합니다. 그러면 HelloWorld 클래스에 s1, s2가 새로운값으로 대체가 될 것으로 생각했는데 영향을 주지 않았습니다. 그 이유가 궁금합니다.

 

1, static 정적 변수와 연관이 있는 건가요?

 

2, 만약 변수에 영향을 주려면 코드를 어떻게 바꿔야 하나요?

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

승현님 안녕하세요,

제가 질문의 의도를 정확히 이해했는지 모르겠습니다만,

우선 제가 이해한 방향으로 말씀을 드려보겠습니다.

 

지금 s1, s2에 각각 문자열이 있는데, sp의 메서드에 인자로 주어진 상태로 돌아왔을 때 (return 받았을 때) 왜 기존의 s1, s2를 대체하지 않고 새로운 변수에 담기냐는 말이 맞을까요?

 

우선, static 변수와는 전혀 상관없습니다. 코드를 보시면 아시다시피 SP 클래스 내에 애초에 static 멤버변수가 없습니다. 그래서 관련 없습니다.

 

영향을 주려면 return 값을 받아서 자기자신에게 재할당하면 됩니다.

String s1 // 최초 값을 할당했다고 가정

String s2 // 최초 값을 할당했다고 가정

 

s1 = sp.p(s1) + 어쩌구 저쩌구 하고 싶은 코드

s2 = 어쩌구 저쩌구 하고 싶은 코드


이렇게 SP 클래스로 만든 객체의 메서드를 이용해서 문자열을 만든 뒤에, s1 / s2가 할당된 변수에 직접 재할당해버리면 됩니다. 그럼 덮어 씌워져서 그 문자열로 다시 변수를 활용할 수 있습니다.

 

String이라는 타입은 클래스에서 파생되었기 때문에 정확히 말하면 하나의 객체이지만,

그냥 int와 char와 같은 타입으로 이해하셔도 크게 무리는 없습니다.

 

하지만, 여전히 객체이기 때문에 별도의 공간을 가진 채로

그 객체만의 변수와 메서드가 또 각각 있는 것입니다.

주의 부탁드립니다.

 

제 답변이 의도하신 질문과 다른 방향이라면 대댓글로 다시 작성해주시면 제가 확인 후에 다시 답변드리겠습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 이승현님.

질문하신 내용은 메서드 오버로딩과 참조 타입의 값을 다른 메서드에서 변경하려고 할 때의 작동 원리에 관련되어 있습니다. 동일한 주제에 대한 기존 답변을 참고할 수 있는 링크를 안내드립니다.

질문하신 사항에 대한 간단한 설명입니다:
1. static 변수와 연관: Static 변수는 클래스에 귀속되어 전체 인스턴스 간에 공유됩니다. 그러나, 질문의 상황은 static 변수와 독립적일 가능성이 큽니다. 문자열 변경 시, 문자열 객체는 불변 객체이므로 새로운 값을 반환하면서 원래의 문자열을 변경하지 않습니다.

  1. 변수를 실제로 변경하려면: 메서드에서 원래 객체의 값을 변경하려면, StringBuilder 또는 StringBuffer와 같은 가변 객체를 사용하는 것이 일반적입니다. 혹은 메서드가 객체를 반환하도록 하여 그 반환 값을 변수에 재할당하는 방법도 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이승현님의 프로필 이미지
이승현

작성한 질문수

질문하기