강의

멘토링

로드맵

Inflearn brand logo image

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

yne325님의 프로필 이미지
yne325

작성한 질문수

김영한의 실전 자바 - 기본편

배열 도입 - 시작

배열 객체 생성

작성

·

59

0


=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
여기에 질문 내용을 남겨주세요.

섹션2 배열도입 11:42부분 그림을 보고 궁금증이 생겼습니다. 왜 student1,student2 객체를 따로 만들어서 students배열에 대입하는 건가요? for(int i=0;i<students.length;i++) students[i]=new students(); 이렇게 객체를 생성하는것이 메모리 낭비가 없기 때문에 더 효율적인 것 아닌가요?

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. yne325님

예제의 경우에는 쉽게 풀어서 설명하기 위해서 student1, student2를 별도로 만든 것입니다 🙂

따라서 배열에서 생성하고 사용하셔도 괜찮습니다.

그러면 생각하신 것 처럼 참조 변수 student1, student2가 없어도 되니 메모리가 아주 조금이나마 아껴지겠지요?

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

yne325님, 배열 내에 객체를 생성하는 방법에 대한 질문을 주셨군요. Student 객체를 배열에 할당하는 방식이 메모리 효율성 측면에서는 어떻게 작용하는지 궁금하신 것 같습니다.

객체를 배열로 처리할 때, 일반적으로 사용되는 두 가지 접근 방식은 아래와 같습니다:

  1. 배열 초기화 후 개별 객체 생성 및 할당:
   Student[] students = new Student[2];
   students[0] = new Student();
   students[1] = new Student();

이 방식은 명확하고, 각 객체의 초기화와 배열에의 할당이 구분되어 있습니다. 각 배열 위치에 별도로 객체를 생성하고 초기화하여 할당할 수 있습니다. 이는 코드의 가독성을 높이고, 각각의 객체가 어떤 경우에 어떻게 초기화되는지를 명확히 알 수 있습니다.

  1. 루프를 통한 객체 생성과 동시에 할당:
   for (int i = 0; i < students.length; i++) {
       students[i] = new Student();
   }

이 방법은 초기화와 할당을 루프로 처리하여 코드 간결성을 제공합니다. 각 배열 요소를 일관되게 초기화해야 할 때 효과적입니다. 특히 같은 타입의 객체를 동일하게 초기화할 경우 효율적입니다.

두 방법 모두 객체를 배열에 할당하는 데 실질적인 메모리 낭비가 발생하지는 않지만, 선택하는 방식에 따라 전체 코드의 가독성과 유연성이 달라집니다. 특정 상황에서 동적으로 객체를 관리해야 할 때, 첫 번째 방법이 유리할 수 있으며, 반면 반복적인 패턴으로 객체를 생성할 경우 두 번째 방법이 더 효율적입니다.

관련된 추가 설명은 아래 링크에서 확인해 보실 수 있습니다:
- 객체를 따로 생성해주는 이유
- 배열의 메모리값 할당에 관한 질문

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

yne325님의 프로필 이미지
yne325
질문자

  1. 루프를 통한 객체 생성과 동시에 할당 이 방식의 경우도 Student[] students = new Student[2]; 와 같이 배열초기화가 필요한 거 아닌가요? students.length를 알려면 객체 할당 전 배열 초기화가 필요하다고 생각했습니다. 1 과 2 방법은 같은 거 아닌가요? 차이점이 잘 이해가 가지 않습니다ㅠㅠ

yne325님의 프로필 이미지
yne325

작성한 질문수

질문하기