++/CS

주니어 자바 개발자를 위한 100가지 질문(1) - 기초

writtenbyrla 2023. 12. 20. 15:46

 

 

인프런에서 매일 뉴스레터처럼 메일을 보내주는데, 단어짱이라고 해서 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