반응형
벌써 3주차가 다되어간다. 시간 정말 빨리가네... 더 !! 더 열심히!!
오늘의 공부 내용
내 답변은 혼자 계속 다듬어 가면서 고치고 고치고 고치다가 정리된 답변입니다... 처음부터 절때 저렇게 정리하지 않았습니다...!
- 예외와 에러의 차이점은 무엇인가?
- 내 답변: 에러는 시스템 수준에서 발생하는 문제이고 복구가 어려우며 프로그램이 중지 될 수 있습니다. OutOfMemory, StackOverflowError 같은 에러가 있으며 예외는 개발자가 catch라는 구문을 사용하여 사전에 처리하여 프로그램을 계속 실행할 수 있도록 할 수 있습니다. 예외에는 checked Exception과 unchecked Exception이 있습니다.
- Checked Exception과 Unchecked Exception의 주요한 차이 및 예시
- 내 답변: chekcedException 은 컴파일 시점에 확인할 수 있는 예외이고 예외가 발생해도 try-catch로 처리할 수 있습니다. 예시로는 IOException같은게 있습니다. uncheckedException은 런타임시 발생하고 입력값을 검증하거나 null 체크 등으로 방지 할 수 있습니다. 예시로 NullPointerException같은게 있습니다.
- 자바에서 `final`, `finally`, `finalize` 키워드의 차이점
- 내 답변: final은 클래스, 메소드, 변수와 함께 사용할 수 있으며, final로 선언된 클래스는 상속 받을 수 없고, final로 선언된 메소드는 변경하지 못하게 overriding이 금지가 되고, final로 선언된 변수는 수정할 수 없습니다. finally는 try-catch-finally 에서 사용되고 try-catch 문에서 예외 처리가 나더라도 finally에 선언된 것들은 무조건 실행됩니다. finalize는 자바에서 객체가 GC에 의해 소멸되기 직전에 호출되는 메소드입니다. 객체가 메모리에서 해제되기 전에 정리작업을 수행하기 위해 사용합니다. 해당 메소드는 객체 소멸 속도를 느리게하므로 try-with-resources나 명시적 close() 호출을 사용하는 것이 바람직 합니다.
- 객체 지향 프로그래밍에서 클래스 상속(Inheritance)과 인터페이스(Interface)의 차이점에 대해 설명
- 내 답변: 클래스 상속은 하위 클래스에서 상위 클래스의 기능을 재정의 하거나 해당 기능을 사용하기 위함으로 구체적인 구현을 물려받을 수 있으며, 인터페이스는 기능의 구체적인 부분이 정의 되지 않아서 인터페이스를 implement 받은 하위 클래스에서 반드시 재정의를 해야합니다.
- 자료구조에서 스택(Stack)과 큐(Queue)의 차이점에 대해 설명
- 내 답변: Stack은 LIFO으로 먼저 마지막에 들어온 데이터가 먼저 나가며 , Queue는 FIFO으로 먼저 들어온 데이터가 먼저 나가는 특징이 있습니다.
- String 연산을 최적화하기 위한 Java Platform의 내부 기능이나 알고리즘에 대해 설명
- 내 답변: String은 불변 객체로 설계되어있고 String pool 이라는 메모리 공간을 통해 같은 내용의 문자열 리터럴이 생성되면, 새로운 객체를 생성하지 않고 기존 String pool의 객체를 참조합니다.
- String 더하기(+) 연산이 불변 객체를 생성하는 과정에서 메모리에 미치는 영향
- 내 답변: 자바에서 String 더하기(+) 연산은 불변 객체인 String을 사용하기 때문에, 연산이 수행될 때 마다 새로운 String 객체가 생성됩니다. 메모리 사용에 큰 영향을 미칩니다. 그로인해 불필요한 메모리 할당과 객체 생성이 발생합니다. 해결 방법으로는 StringBuilder 또는 StringBuffer를 사용하는 것이 좋습니다. 이 클래스들은 새로운 문자열을 추가할 때 기존의 객체를 재사용하며 새로운 객체 생성을 최소화 합니다.
- 스트링, 스트링 버퍼, 스트링 빌더 각각의 사용 사례 (String, StringBuffer, StringBuilder의 차이점)
- 내 답변: String은 불변 객체로 새로운 문자열을 더할때 마다 객체를 새로 생성해서 문자열을 많이 변경할 필요가 없는 경우 사용하고, StringBuffer와 StringBuilder는 가변 객체로 StringBuilder는 thread safe하지 않지만 빠르다는 장점이 있어서 싱글스레드 환경에서 사용하기적합 하고, StringBuffer는 thread safe하지만 StringBuilder보다 느리다는 단점이 있습니다 그래서 멀티스레드 환경에 사용하기 적합 합니다.
- 스트링 객체의 내부 구조를 설명하고, 이를 통해 어떤 편의성을 제공하는지
- 내 답변: String클래스는 내부적으로 문자열을
char[] 배열을 사용하여 저장java9 이후로는 byte[]배열 저장합니다. 그리고 String 리터럴을 관리하기 위해 스트링 풀을 사용합니다. 동일한 문자열 리터럴을 사용할 때마다 새로운 객체를 생성하지 않고 기존 객체를 참조하도록 해서 메모리 사용을 최적화 할 수 있고 substring()이나 split()등의 다양한 메소드를 사용할 수 있습니다.
- 내 답변: String클래스는 내부적으로 문자열을
- 스트링 풀의 동작 원리와 문자열 리터럴과 new String의 차이점
- 내 답변: 스트링 풀은 메모리 관리와 최적화를 위한 시스템 입니다. 같은 내용의 문자열 리터럴은 한번만 저장하고 재사용할 수 있게 해줍니다. 문자열 리터럴을 선언하면 먼저 스트링 풀에 존재하는지 확인하고 있으면 기존의 것을 참조하고 없다면 새로운 문자열 객체를 풀에 저장하고 해당 객체를 참조하도록 합니다. new String으로 객체 선언시 heap 메모리에 매번 새로운 객체를 만들어 메모리에 영향을 줍니다.
Java 9이전에는 char[] 배열을 사용하였지만 이후는 byte[]로 바뀐 부분에 대해서 더 찾아보았다!
정리하자면
기존에 String에서 1 byte만 필요해도 내부적으로는 char[]로 돌아가고있어서 2byte를 사용했었는데
Java 9 이후로는 byte[]를 사용함으로써 메모리 사용 개선과 1byte로 돌아가게 변경되었다는 것이다!
https://mangkyu.tistory.com/410
[Java] 자바 9에 개선 및 최적화된 String 내부 구조(JEP254: Compact Strings)
1. 자바 9에 개선 및 최적화된 String 내부 구조 (JEP254: Compact Strings)[ 자바 8까지의 String 클래스의 문제점 ]자바 8까지는 내부적으로 char형 배열을 사용하여 문자열을 다루고 있었다.public final class Str
mangkyu.tistory.com
공부한 후 느낀점
글로 먼저 쓰고 다시 연습하고 반복인데 기억할 수 있을까...? 이해해도 기억이 안나면 말짱도루묵이란말이야 슬프구나
반응형
'Study > Study Alone' 카테고리의 다른 글
[나혼자공부] 4주차 복습-2 (0) | 2024.12.26 |
---|---|
[나혼자공부] 4주차 복습-1 (2) | 2024.12.25 |
[나혼자공부] 3주차 복습-2 (1) | 2024.12.20 |
[STUDY] 2주차 (0) | 2024.12.16 |
[STUDY] 1주차 (0) | 2024.12.06 |
댓글