반응형
으아ㅏㅏ 너무 많아ㅏㅏ 공부할껀 왜 매일매일 생기고 왜이렇게 많은걸까 그래서 행복해!
오늘의 공부 내용
- 스트링의 각 캐릭터를 어떻게 개별적으로 접근할 수 있나
- 내답변: String은 객 문자를
char[]로 저장하므로 각 문자에 개별적으로 접근할 수 있습니다.java에서는 charAt() 메서드를 제공하고있고 이 메소드를 사용해서 각 문자를 가져올 수 있습니다.java9 이후로는 byte[]배열 저장으로 변경하였다.
- 내답변: String은 객 문자를
- new String으로 생성된 객체와 스트링 리터럴의 비교 시, equals와 == 연산자의 동작 차이
- 내답변: new String으로 생성된 객체는 스트링 풀에 있는 객체 여부 상관없이 Heap 영역에 새로운 객체를 생성하므로 객체의 참조 을 비교하는 == 연산자 사용시는 false가 나오고 문자열 자체만 비교하는 euquals() 메소드 사용시는 true가 나옵니다.
- 예외 상황을 처리하기 위해 예외를 던지는 방법
- 내답변: throw 키워드를 사용하여 직접 예외를 발생시킬 수 있습니다.throws 키워드를 사용하여 해당 메소드에서 처리할 수 없는 예외 상황일때는 문제해결이 가능한 좀더 넓은 메소드인 해당 메서드를 호출하는 쪽에서 예외를 처리하거나 다시 던질 수 있도록 강제합니다.
- 예외를 던지는 것과 예외를 처리하는 것 사이의 선택에 대해 어떻게 결정해야 하는지
- 내답변: 예외를 던지를 기준은 문제 해결 책임이 호출자에게 있거나 비정상적인 상태를 명확하게 알리고 싶을때 던집니다. 추가로 예외가 발생된 메소드에서 단독으로 처리할 수 있는지 확인을 한 후 해결할 수 없을 경우에는 throws를 사용하여 던집니다. 예외를 직접 처리할때는 문제를 해결할 수 있는 정보가 현재 메소드일때 직접 처리하는 것이 좋습니다. 종합적으로 보면 책임소재 여부나 복구 가능성 으로 판단할 수 있습니다.
- 자바의 클래스 로더에 대해 설명 (자바에서 클래스가 로드되는 과정)
- 내답변: 클래스 로더는 자바 프로그램 실행에 필요한 클래스들을 동적으로 로드하는 역할을 담당합니다. 클래스 로딩 과정은 클래스를 바이트코드로 읽어서 메모리에 배치하는 로딩, 클래스 검증, 준비 등을 담당하는 링킹, static필드 초기화와 static블록을 실행하는 초기화 순서로 진행됩니다.
- 클래스 로더는 자바 프로그램 실행에 필요한 클래스를 동적으로 로드하여 메모리에 올리는 역할을 합니다. 클래스가 로드되는 과정은 크게 로딩(Loading), 링킹(Linking), 초기화(Initialization)의 세 단계로 이루어집니다. 먼저, 로딩 단계에서는 JVM이 클래스 파일(.class)을 읽어서 메모리에 로드합니다. 이후 링킹 단계에서는 로드된 클래스가 JVM에서 사용할 수 있도록 준비됩니다. 이 과정에서 클래스 파일이 올바른 형식인지 확인하는 검증(Verification), static 변수에 메모리를 할당하고 기본값을 설정하는 준비(Preparation), 참조된 다른 클래스나 메서드를 연결하는 **해결(Resolution)**이 수행됩니다. 마지막으로 초기화 단계에서는 static 변수에 초기값을 설정하고, static 블록을 실행하여 초기화 작업을 완료합니다. 이 모든 과정은 클래스가 처음 사용될 때 한 번만 수행되며, 이후에는 이미 로드된 클래스를 재사용하게 됩니다.
- Java에서 Inner 클래스와 Nested 클래스를 사용하는 상황과 그 이유
- 내답변: Inner클래스와 Nested 클래스 주요 사용 이유는 코드의 가독성과 유지보수성을 향상시키고, 외부에서의 불필요한 접근을 제한할 수있다는 장점때문에 사용합니다. Inner클래스는 Outer 클래스의 인스턴스와 연결되어있어서 outer클래스의 모든 맴버에 접근할 수 있습니다. Nested클래스는 static 맴버처럼 사용할 수 있어서 외부클래스의 인스턴스 없이도 사용할 수 있습니다.
- 패키지 내부 클래스 간의 접근 제어를 어떻게 관리하나
- 내답변: 패키지 내부 클래스 간의 접근 제어는 default 접근 수준을 주로 활용하고 필요에 따라 protected 나 public을 사용하여 더 넓은 범위를 제공합니다.
- JVM 메모리 구조에 대해 설명
- 내답변: 자바에서는 스택, 힙, 메서드, PC 레지스터등의 메모리 구조로 이루러져있습니다. 스택에서는 각 스레드마다 독립적으로 생성되며, 메서드 호출정보와 지역변수가 저장이 되됩니다. 힙영역에서는 GC가 관리하는 영역이고 모든 스레드가 공유되며 객체나 배열이 저장이 됩니다. 메서드 영역에서는 JVM이 시작될 때 생성되며, 모든 스레드가 공유하는 영역이고 클래스데이터가 저장이 됩니다. PC 레지스터 에서는 각 스레드가 실행 중인 JVM 명령어의 주소를 저장합니다.
- 제네릭을 사용하면 어떤 장점 및 주의점은?
- 내답변: 컴파일 시 타입 체크를 하기 때문에 타입 안정성을 보장하기 때문에 런타임 에러를 줄일 수 있다는 장점이 있지만 기본 타입을 사용할 수 없어서 래퍼 클래스를 사용해야하고 컴파일시 타입 정보가 소거되어 런타임시에는 Object로 처리됩니다. instanceof를 사용해서 타입정보에 의존해야한다는 단점이 있습니다.
- 제네릭을 사용하면 성능에 어떤 영향을 미치나
- 내답변: 제네릭을 사용하면 타입 캐스팅이 불필요해져서 컴파일 시 타입을 고정하기 깨문에 불필요한 타입 변환 비용을 줄여 성능을 약간 향상시킬 수 있습니다.
- 컬렉션 프레임워크에서 동시성 문제를 해결하기 위한 컬렉션은 무엇이 있나?
- 내답변: concurrentHashMap, concurrentLinkedQueue 등이 있습니다.
- 컬렉션 프레임워크의 핵심 인터페이스와 각각의 특징을 설명
- 내답변: Collection 인터페이스 하위에는 데이터의 순서를 유지하고 중복 데이터를 허용하는 List, 들어온 순서를 기준으로 데이터를 조작할 수 있는 Queue, key와 value를 한쌍으로 데이터를 저장하는 Map, 중복 데이터는 저장할 수 없고 순서도 보장되지 않는 Set이 있습니다.
- 배열은 스택에 들어갈까 힙에 들어갈까
- 내답변: 힙은 동적으로 할당된 객체들이 저장되는 공간으로 자바에서 배열은 객체이기 때문에 힙에 들어갑니다. 배열을 선언하고 값을 할당 했을 경우 배열 자체는 스택에 있는 변수고 실제 배열 요소들은 힙에 위치합니다.
- 멀티스레드 환경에서 스택과 힙 영역의 관리 방법은?
- 내답변: 힙에서는 모든 스레드에서 공유되는 메모리 영역입니다. 여러 스레드가 동시에 접근할 수 있기 때문에 동기화가 필요할 수 있습니다. synchronized() 키워드나 lock 객체를 사용해서 스레드간의 동기화를 보장해야하며 GC가 메모리를 관리해줍니다. 스택에서는 자신만의 스택 공간을 가지고 있으며 스레드가 각각 스택을 관리하므로 다른 스레드와 충돌하지 않습니다. 그리고 사용이 끝나면 알아서 메모리에서 정리가 됩니다.
- 자바에서 스태틱 변수를 사용하는 대표적인 사례
- 내답변: static 변수는 클래스가 로드될 때 초기화됩니다. 따라서 static변수는 모든 인스턴스가 값을 공유하게 됩니다. 대표적으로는 클래스의 상수를 정의하거나 싱글턴 패턴이 있습니다.
- 자바의 인스턴스 오브 키워드에 대해 설명
- 내답변: instanceof 키워드는 자바에서 객체가 특정 클래스의 인스턴스이거나 해당 클래스의 서브클래스(자식 클래스) 인스턴스인지 확인할 때 사용됩니다.
공부한 후 느낀점
아 힘들었다 중간에 문제 몇개 지웠긴했는데 괜찮아! 수고많았따!
반응형
'Study > Study Alone' 카테고리의 다른 글
[나혼자공부] 4주차 복습-2 (0) | 2024.12.26 |
---|---|
[나혼자공부] 4주차 복습-1 (2) | 2024.12.25 |
[나혼자공부] 3주차 복습-1 (0) | 2024.12.19 |
[STUDY] 2주차 (0) | 2024.12.16 |
[STUDY] 1주차 (0) | 2024.12.06 |
댓글