인프런에서 매일 뉴스레터처럼 메일을 보내주는데, 단어짱이라고 해서 IT 용어들을 하나씩 알려준다.
한 번에 이런 용어나 개념을 정리할 방법이 없을까 찾다가 커리어리에서 컬리 백엔드 개발자인 조서희 님이 정리해서 올려준 100가지 질문을 발견!
무엇이든지 공부할 때 나의 언어로 바꿔서 흡수하는 과정도 굉장히 필요한 것 같다.
💻 JDK와 JRE의 차이점은 무엇입니까?
✅ JRE는 자바 실행 환경으로 자바 프로그램을 실행하는 데 필요한 것이고, JDK는 자발 개발 도구로 자바 애플리케이션을 개발하기 위해 필요한 기능으로 JRE를 포함합니다.
JRE(Java Runtime Environment)
- 자바 실행 환경으로 단순히 실행하기 위한 목적이라면 JRE만으로도 가능하나 컴파일 에러가 날 가능성이 있음
- 컴파일러나 디버거(Debugger) 등의 도구는 포함하지 않음
JDK(Java Development Kit)
- 자바 개발 도구
- JRE를 포함할 뿐만 아니라 컴파일러(javac), javadoc, jar 등 개발에 유용한 도구들을 포함
💻 ==와 equals의 차이점은 무엇입니까?
✅ 비교연산자 ==는 주소값을 비교하여 일치여부 확인하고 equals 메서드는 값의 내용을 비교하여 일치여부 확인합니다.
==의 경우
int의 경우 기본형으로, a를 10으로 초기화하여 선언 후 b도 10으로 초기화하여 선언하면 새로운 객체가 선언되는 것이 아닌 데이터 값 그 자체로 저장이 된다. 따라서 주소값이 다르지 않기 때문에 결과는 true이다.
int a = 10;
int b = 10;
if(a==b){
System.out.println("a와 b가 같습니다");
} else {
System.out.println("a와 b가 다릅니다");
}
☞ "a와 b가 같습니다"
equals()의 경우
==와 equals()의 차이점을 1차적으로 생각했을 때, equals는 String에서 사용된다고 답할 수 있다. 그 이유는 String이 참조형이기 때문인데 참조형이란 변수를 초기값과 함께 선언하면 기존에 있는 데이터와 값이 같더라도 새로운 객체로 선언되어 다른 주소에 할당되게 된다.
equals는 java에서 제공하는 String 클래스의 메서드 중 하나이다. equals는 1차적으로 주소값이 같으면 ==로 확인하여 결과를 반환하지만, 주소값이 다른 경우에는 문자열의 내용을 비교하여 데이터 값이 같은 경우에는 주소값이 다르더라도 true를 반환한다.
String str1 = "abc";
String str2 = new String("abc");
if(str1==str2){
System.out.println("일치합니다");
} else {
System.out.println("일치하지 않습니다);
}
☞ "일치하지 않습니다"
String str1 = "abc";
String str2 = new String("abc");
if(str1.equals(str2)){
System.out.println("일치합니다");
} else {
System.out.println("일치하지 않습니다);
}
☞ "일치합니다"
💻 두 객체가 동일한 hashCode를 가지면 Equals()가 참이어야 합니다, 그렇죠?
✅ 그렇지 않습니다.
두 객체의 값이 동일할 경우(equals()가 참) ☞ hashCode가 동일(O)
두 객체가 동일한 hashCode를 가질 경우 ☞ 내용까지 동일하면 equals()가 참, 내용이 다를 경우 equals()는 거짓
💻 자바에서 final의 기능은 무엇입니까?
✅ 변경을 원하지 않을 때 사용하며 변수, 메서드, 클래스에 final로 선언하여 적용할 수 있습니다.
변수의 경우 final로 선언되어 초기화되면 그 값을 변경할 수 없습니다. 메서드의 경우 하위 클래스에서 오버라이딩이 불가능합니다. final로 선언된 클래스는 다른 클래스에서 상속이 불가능합니다.
💻 자바에서 Math.round(-1.5)는 무엇을 의미합니까?
✅ 가까운 정수로 반올림할 때 사용하는 메서드입니다. 따라서 Math.round(-1.5)의 결과는 -1입니다.
💻 String은 기본 데이터 타입입니까?
✅ String은 참조 타입입니다. 기본 데이터 타입은 논리형, 문자형, 정수형, 실수형이 있습니다.
- 기본 데이터 타입: 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)
- 참조 타입: 메모리의 주소를 값으로 가지며 객체를 참조함
💻 자바에서 문자열을 조작하는 클래스는 무엇이 있습니까? 각 클래스의 차이점은 뭘까요?
✅ String, StringBuilder, StringBuffer
✅ String은 변경이 불가능하며 StringBuilder와 StringBuffer는 변경이 가능합니다. StringBuffer는 멀티스레드 환경에서 동기화를 지원하며 StringBuilder는 동기화를 보장하지 않습니다.
- String 클래스는 Heap 메모리 영역에 생성되어 객체 내용을 변경할 수 없음. 따라서 문자열 조작 시 새로운 문자열 객체가 생성되어 문자열 연산이 많은 경우에는 성능 저하가 발생할 수 있음
- StringBuilder, StringBuffer는 기능적으로 동일하지만 StringBuffer의 경우 멀티스레드 환경에서 동기화를 지원하여 안전하게 사용 가능
💻 String str ="i"와 String str = new String("i")가 동일합니까?
✅ 동일하지 않습니다.
String str ="i"는 문자열을 리터럴로 선언한 것이며 문자열 풀에 저장됩니다.
String str = new String("i")는 새로운 객체를 생성하여 문자열을 할당합니다.
💻 문자열을 반전시키는 가장 좋은 방법은 무엇인가요?
✅ 문자열을 배열로 변환하여 역순으로 다시 반환하는 방법과, StringBuilder 또는 StringBuffer의 reverse() 메서드를 사용하는 방법이 있습니다.
배열로 변환하는 방법
String str = "Hello";
char[] charArray = str.toCharArray();
int left = 0;
int right = charArray.length - 1;
while (left < right) {
char temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
left++;
right--;
}
String result = new String(charArray);
reserve() 메서드 사용하는 방법
String str = "Hello";
StringBuilder sb = new StringBuilder(str).reverse();
String result = sb.toString();
💻 String 클래스의 일반적인 메서드는 무엇이 있나요?
✅ equals(), charAt(), length(), substring(), concat(), toLowerCase(), toUpperCase(), indexOf(), replace(), split() 등이 있습니다.
equals(): 문자열을 비교하여 일치하면 true 반환
charAt(): 해당하는 인덱스의 문자를 반환
length(): 문자열의 길이 반환
substring(): 주어진 범위에 해당하는 문자열 반환
concat(): 문자열을 연결하여 새로운 문자열 반환
toLowerCase(), toUpperCase(): 소문자, 대문자로 변환
indexOf(): 주어진 문자의 인덱스를 반환
replace(): 문자열 내의 특정 문자를 새로운 문자로 변환하여 새로운 문자열을 반환
split(): 주어진 문자를 기준으로 문자열을 분할하여 문자열 배열로 반환
💻 추상 클래스에서 추상 메서드는 필수적인가요?
✅ 반드시 추상 메서드를 가질 필요는 없습니다.
- 추상클래스는 일반 메서드와 필드를 가질 수 있음.
- 추상 메서드를 하나 이상 가지게 되면 그 클래스는 반드시 추상 클래스로 선언되어야 함.
- 추상 클래스를 상속받는 자식 클래스에서는 반드시 추상 메서드를 오버라이딩하여 재정의 해주어야 함.
💻 보통의 클래스와 추상 클래스의 차이는 무엇인가요?
✅ 추상 클래스는 하위 클래스의 공통된 기능을 정의하는 미완성 클래스로 추상 메서드를 포함한 클래스입니다. 보통 클래스와는 다르게 인스턴스화가 불가능하여 new 연산자를 통해 새로운 객체를 생성할 수 없으며 코드 재사용성과 확장성을 위하여 상속 계층을 형성합니다.
💻 final은 추상 클래스를 수정할 때 사용할 수 있나요?
✅ 불가능합니다. 추상 클래스는 상속을 통해 하위 클래스에서 추상 메서드를 재정의하도록 하기 때문에, 변경이 불가능 하도록 지정하는 final을 추상 클래스에 사용하지 않습니다.
출처: https://careerly.co.kr/comments/83898
조서희 / 주니어 자바 개발자를 위한 100가지 질문 1 | 커리어리
"주니어 자바 개발자를 위한 100가지 질문" 1편입니다. 주니어 자바 개발자를 위한 100가지 질문 (2)...
careerly.co.kr
'++ > CS' 카테고리의 다른 글
[TIL] CS공부 5일차 (0) | 2024.03.09 |
---|---|
[TIL] CS공부 4일차 (0) | 2024.03.08 |
[TIL] CS공부 3일차 (0) | 2024.03.07 |
[TIL] CS공부 2일차 (0) | 2024.03.06 |
[TIL] CS공부 1일차 (0) | 2024.03.05 |