인프런 커뮤니티 질문&답변
[MyString 실습 인스턴스 중복 생성 문의] MyString.setString(String param)
작성
·
12
0
선생님 안녕하십니까
public void setString(String param) {
string = param.getBytes().clone();
}getBytes() 메서드 호출 시점에 [] bytes 인스턴스가 새로 생성 되었으나 이후에 clone() 메서드를 호출하는 것은 getBytes()로 새로 생성한 인스턴스에 대한 또 다른 인스턴스를 생성하는 것이므로 이는 중복 생성이 아닌가.. 하는 생각이 들어 여쭙고자 합니다.
제 생각에는 매개변수의 타입이 [] bytes 임을 전제로 하시고 말씀하신것 같습니다만 말씀하시는 내용과 코드가 달라 혹여 수강생들에게 혼란을 주지 않을까 싶어 질문으로 남깁니다.

혹여나 제가 잘못 생각한 부분이 있다면 따끔히 지적 부탁드립니다.
항상 좋은 상의 만들어주셔서 감사합니다 (꾸벅)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. ygu9907님!
문의해주신 내용은 Java의 getBytes() 메서드와 그 결과의 clone() 적용에 관한 것입니다. 이해하신대로, getBytes() 메서드를 호출하면 String 객체의 내용을 바이트 배열로 인코딩하여 새로운 바이트 배열 인스턴스를 생성하게 됩니다. 그 후 clone() 메서드를 호출하면, 이미 생성된 바이트 배열을 복사하여 또 다른 새로운 인스턴스를 생성하게 되므로, 말씀하신 대로 결과적으로 두 번의 인스턴스 생성이 이루어집니다.
이러한 중복 생성은 특히 깊은 복사 작업을 위한 코드 명확성이나 디버깅을 쉽게 하기 위한 의도로 사용되기도 합니다. 예를 들어, 다른 개발자가 해당 코드 부분을 읽을 때 의도적으로 복사본을 사용하려는 개발자의 의도를 명확히 알 수 있기 때문입니다.
다만, 성능을 최적화해야 하는 상황에서는 불필요한 객체 생성을 최소화하는 방향으로 고려할 수도 있습니다. 따라서 특정 상황에 따라 달리 접근할 필요가 있으며, 코드에 기재된 기능의 목적에 따라 clone 사용을 다르게 적용할 수 있습니다.
이와 유사한 다른 질문을 참고하여 더 깊이 이해하고 싶으시다면, 아래 링크들을 확인해보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





