[TIL] 질문에 답하기 (1)

mimme·2023년 8월 21일
0

TIL

목록 보기
1/1
post-thumbnail

주니어 자바 개발자를 위한 100가지 질문 1편
을 바탕으로 질문에 답변하는 형식으로 이루어졌습니다.

1.JDK ( Java Development Kit) 자바 개발 키트

: JDK는 JRE를 포함하고 컴파일과 같이 개발에 사용하는 도구들을 포함한다.
자바 프로그램을 개발하는경우에는 JDK를 사용해야한다.

JRE ( Java Runtime Environment) 자바 실행 환경
: 자바 클래스 라이브러리를 포함하고 있어서 자바 프로그램을 실행하는것을 지원한다.
단, 컴파일이나 디버그와 같은 도구는 포함하지 않는다.
자바 프로그램을 개발하는것이 아닌 단순 자바를 실행하기만 할 경우에는 JRE를 사용하면 된다.


2. == 와 equals의 차이점

==
: 비교하고자하는 대상의 주소값을 비교한다.

equals()
: 비교하고자 하는 대상의 값 자체를 비교한다.
만약, String 타입의 파라미터를 받아서 null 값으로 equals를 처리했을 경우

  if (param.equals("")) {
   // equals()의 인자는 null 이여도 NullPointerException이 발생하지 않는다.
   //  Object.equals() 내부에서 자체적으로 param 값이 null인지 체크하기 때문이다
  }

3. Equals()는 두 개체가 동일한 hashCode()를 가지고 있는 경우 참이어야 합니다. 맞습니까?

: hashCode()는 객체의 해시코드를 반환하는 메서드를 말한다.
equals()의 경우 객체들간의 값 자체를 비교하는 메서드를 말한다.
두 객체를 equals()를 사용해 확인했을때 true를 반환한다면, hashCode()역시 값은 같아야한다.
하지만, hashCode() 값이 동일하다고해서 equals()값이 항상 같은 값으로 나오는것은 아니다.
equals() 메서드를 재정의 할때 hashCode() 메서드도 함께 재정의를 해야지 해당 일관성을 유지할 수 있다.


4. Java에서 final의 기능은 무엇입니까?

: 변수, 메서드, 클래스에 모두 사용가능하다.
즉, 해당 final이 붙은 경우 해당 값을 수정 할 수 없다는 의미를 가지게 된다.
그러므로 초기화 값은 필수적이다. ( 값을 변경하고자 할 경우 컴파일 에러가 발생한다.)
final을 사용할 경우 아래와 같은 상황이 된다.
1) 변수의 경우 값 변경이 불가능하다. ( = 값 변경 불가)
2) 메서드의 경우 Override가 되지 않는다. ( = 재정의 불가)
3) 클래스의 경우 다른 클래스가 상속할 수 없는 클래스가 된다. ( = 상속 불가)


5. Java에서 Math.round(-1.5)는 무엇을 의미합니까?

: round는 반올림을 의미하며 해당값은 -1이 나온다.


6. String은 기본 데이터 타입입니까?

: 자바에서 데이터타입은 기본 타입과 참조 타입이 존재한다.
기본 타입의 경우, 값이 저장될때 실제 값이 저장된다. ( 정수형 / 실수형 / 문자형/ 논리형 등이 존재한다)
참조 타입의 경우, 값이 저장될때 저장된 위치의 주소값이 저장된다.
문자열인 String의 경우 클래스 타입으로 참조타입에 해당하기 때문에 기본 데이터 유형이 아니다.


7. 자바에서 문자열을 조작하는 클래스는 무엇이 있습니까? 각 클래스의 차이점은 뭘까요?

: 문자열과 관련된 클래스는 총 3가지가 있다.
Stirng, StringBuffer, StringBuilder
크게 두종류로 나눈다면 문자열의 가변과 불변으로 나뉠 수 있다
가변 : StringBuffer, StringBuilder ( 문자열이 할당된 메모리 공간이 변한다.)
불변 : String ( 문자열이 할당된 메모리 공간이 변하지 않는다.)
? StringBuffer vs StringBuilder
1 ) StringBuffer : 동기화지원 / 멀티쓰레드 환경
2 ) StringBuilder : 동기화 지원을 하지 않는다 (싱글쓰레드 환경 혹은 멀티쓰레드 환경이지만 동기화가 필요하지 않은경우 사용한다.)
+) StringBuilder 동기화를 지원하지 않기 때문에 싱글쓰레드 환경에서 연산속도가 빠르다.


8. String str ="i"와 String str = new String("i")가 동일합니까?

: 객체를 생성할 경우에는 해당 주소값이 할당되기 때문에 비교 할 경우 false가 출력된다.
하지만, String str1 ="i" 와 String str2 = "i" 처럼 값을 할당할경우에는 문자열 자체를 비교하기 때문에 true 값이 출력된다.


9. 문자열을 반전시키는 가장 좋은 방법은 무엇인가요?

: StringBuilder 에 reverse() 사용하기


10. String 클래스의 일반적인 메서드는 무엇이 있나요?

: 메서드가 많지만 자주 사용되는 메서드를 사용하고자한다.
1 ) subString() : 문자열 자르기
2 ) equals() : 문자열 비교
3 ) length() : 문자열 길이
4 ) replace() : 문자열 변경
5 ) trim() : 문자열 공백 제거 ...

profile
끄적끄적

0개의 댓글