강의

멘토링

로드맵

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

Binary호남선님의 프로필 이미지
Binary호남선

작성한 질문수

토비의 스프링 6 - 이해와 원리

오브젝트 정의 중 배열에 대해서

작성

·

9

0

오브젝트를 클래스의 인스턴스 혹은 배열이다라고 하면 기술적으로 맞는 정의라고 하셨는데

배열이 별도로 정의에서 언급된 이유가 궁금합니다!


찾아보았을 때에는

  1. new 클래스명() 과는 다른 별도의 new int[] 와같은 형식으로 생성

  2. JVM내에서 바이트코드 레벨에서의 조작을 통한 다른 조작 방식으로 접근

으로 일반적인 클래스 생성을 통한 방식과는 다른 방식으로 배열을 객체로서 구현하고 접근하기 때문에 별도로 정의한다라고 이해하였지만 단순 자바에서의 구현 방식 차이로 자바에서만 별도 정의되어 표현된것인지 원래 오브젝트의 개념중 배열은 별도 기술하는것인지 궁금하며 혹시 위의 기술한것과 다른 이유가 존재하는지 궁금합니다!

답변 1

0

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

Binary호남선님께서 배열이 객체로서 별도로 언급되는 이유에 대해 궁금해 하시는 점에 대해 설명드리겠습니다.

자바에서 배열은 특이한 타입입니다. 배열은 기본적으로 객체로 간주되지만, 일반 클래스와는 조금 다른 방식의 생성 및 사용 패턴을 가지고 있습니다. 배열이 객체라는 것은 다음과 같은 이유로 정당화됩니다:

  1. 객체로서의 배열:

    • 자바에서 배열은 기본형 타입이든 참조형 타입이든 모두 객체로 간주됩니다. 따라서 배열을 생성하면 메모리에서는 객체가 생성이 되고, 배열은 그 객체에 대한 참조를 가집니다.
    • 모든 배열은 Object 클래스의 메서드를 상속받을 수 있습니다. 따라서 clone(), toString(), equals() 같은 메서드를 호출할 수 있습니다.
  2. 배열의 생성:

    • new int[]처럼 배열을 특별한 방식으로 생성하는 방식은 자바에서 배열을 직접적으로 생성하고 초기화하는 구문입니다. 이 방식은 제어 작업이나 메모리 할당 측면에서 자동화된 방식으로 작동하여 클래스 인스턴스화와 다르게 보일 수 있습니다.
  3. 바이트코드 수준에서의 차이:

    • JVM은 배열을 특수하게 다룹니다. 배열은 특별한 바이트코드 명령어(newarray, anewarray 등)를 사용하여 생성되고 접근됩니다. 이는 배열이 메모리 내에서 빠르게 접근될 수 있도록 최적화되어 있다는 것을 반영합니다.

배열이 객체로 정의되는 것은 자바 뿐만 아니라 개념적으로 배열이 메모리상의 데이터 집합체로서 각 요소에 접근할 수 있는 객체로 취급되기 때문입니다. 자바는 이러한 객체 개념을 기반으로 설계되어 있어 배열을 객체로 취급합니다.

이와 관련된 더 많은 내용을 보시려면, 토비님 강의 에서 자세한 설명을 제공하고 있을 것입니다.

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

Binary호남선님의 프로필 이미지
Binary호남선

작성한 질문수

질문하기