Reason
종류
기초 단계 질문
기본 개념
- 자료형이란 무엇이며, 왜 필요한가요?
- 데이터를 저장하고 처리 하기 위한 메모리 공간의 크기와 형식을 정의한것
- 프로그램에서 사용되는 데이터의 종류와 범위를 명확히해 메모리를 효율적으로 사용하고 정확성을 보장 하기 위함
- 정적 타입과 동적 타입의 차이점은 무엇인가요?
- 정적: 컴파일시 타입이 결정
- 동적: 런타임에 타입이 결정
- 기본 데이터 타입(primitive types)과 참조 타입(reference types)의 차이는 무엇인가요?
- 기본: 실제 값을 직접 저장
- 참조: 객체의 메모리 주소를 저장, 실데이터는 힙 영역에 저장
타입 변환
- 묵시적 형변환과 명시적 형변환의 차이점은 무엇인가요?
- 형변환 시 발생할 수 있는 데이터 손실은 어떤 경우에 일어나나요?
- 큰타입에서 작은 타입으로 변환시 → 데이터를 소실 함
- 실수형 사용시 float(32byte)를 사용시 소수 문제 발생 가능
- 실수형에서 정수형 변환시 소수점 버려짐
중급 단계 질문
메모리와 자료형
- 각 자료형이 메모리에서 어떻게 저장되나요?
- 기본: 스택 메모리(지역 변수)에 직접 저장
- 참조: 스택 메모리(주소값), 힙 메모리에 객체 저장(실 데이터)
- 문자열이 메모리에 저장되는 방식은 다른 자료형과 어떻게 다른가요?
- 문자열은 특수한 케이스로 StringPool을 통해 메모리 효율성 확보
- StringPool이란?
- JVM에 존재하는 문자열 리터럴을 관리하는 특별한 저장 공간
- Java: StringPool, JS: EngineLevel, Py: StringInterning
- 순서
- 동일한 값 있는지 확인 → 없다면 생성, 있으면 재사용
- 특징
- 동일한 문자열 중복 저장 방지, 캐싱
- 문자열이 불변이라 스레드 안전
- 포인터와 참조의 차이점은 무엇인가요?
- 요새 부르는데 에는 큰 차이는 없으나 세세한 차이가 있음
- 포인터
- 선언후 초기화 가능, 다른 주소로 재할당 가능
- 널 가능
- 별도의 메모리 영역 사용
- 잘못된 메모리 참조 가능
- 참조
- 선언과 동시에 초기화 해야함, 변경 불가
- 널 불가
- 별도의 메모리 공간 사용하지 않음
- 항상 존재하는 객체를 보므로 상대적으로 더 안전
배열과 컬렉션
- 정적 배열과 동적 배열의 차이점은 무엇인가요?
- 정적 배열
- 컴파일 시점에 크기가 고정되며 변경 불가능
- 메모리 사용이 예측 가능하고 접근 속도가 빠름
- 동적 배열
- 런타임에 크기 조정이 가능하며 필요에 따라 메모리를 재할당
- 크기 조정 시 새로운 메모리 할당과 복사 작업으로 인한 오버헤드 발생
- 제네릭스를 사용하는 이유는 무엇인가요
- 타입 안정성
- 컴파일 시점에서 타입 체크가 가능하여 런타임 에러 방지
- 잘못된 타입 사용을 컴파일 단계에서 감지
- 코드 재사용성
- 다양한 타입에 대해 동일한 로직을 재사용 가능
- 타입 캐스팅 제거로 성능 향상