내가 개발해볼게!!

Do it! 자바 프로그래밍 입문 9일차 본문

Language/Java

Do it! 자바 프로그래밍 입문 9일차

보송송희 2022. 7. 3. 19:59

교재 맨앞쪽 진도표에 나와 있는 15일 코스로 공부하고 있습니다!!

Do it! 자바 프로그래밍 입문 9일차
11장 기본 클래스
- 11-1 Object 클래스
- 11-2 String 클래스
- 11-3 Wrapper 클래스
- 11-4 Class 클래스
  • Object 클래스에 대해 배웠습니다.

자바 프로그래밍을 하면서 외부 클래스를 사용하려면 import문으로 클래스가 어느 패키지에 속해 있는지 선언해야 합니다. 기본적으로 많이 사용하는 클래스들이 속해 있는 java.lang 패키지는 컴파일 시 import java.lang; 문장이 자동으로 추가되기 때문에 코딩하면서 직접 작성할 필요가 없습니다. 

 

Object 클래스는 모든 자바 클래스의 최상위 클래스입니다. 모든 클래스들은 Object 클래스를 상속받게 되는데, Object 클래스의 메서드들 중에서 하위 클래스에서 재정의할 수 있는 메서드도 있고, 재정의할 수 없는 메서드도 있습니다. 

 

toString() 메서드는 객체의 정보를 문자열로 반환하는 메서드입니다. 이를 출력시키면 '클래스 이름@해시 코드 값'이 콘솔창에 출력됩니다. String 클래스로 생성된 인스턴스를 출력시키면 문자열 값이, Integer 클래스로 생성된 인스턴스를 출력시키면 정수 값이 출력됩니다. 이는 String 클래스와 Integer 클래스에서 toString() 메서드가 재정의되었기 때문입니다. toString() 메서드를 직접 재정의할 수도 있습니다. 

 

toString() 메서드를 재정의하기 전에는 프로그램을 실행시키면 '클래스 이름@해시 코드 값'이 출력되었지만, line 12~15와 같이 재정의한 후 프로그램을 실행시키면 다음과 같이 다른 출력 결과가 나타납니다.

 

equals() 메서드는 두 인스턴스의 주소 값을 비교한 뒤 같은지 다른지를 boolean 값으로 반환하는 기능을 합니다. 간혹 두 인스턴스의 저장된 위치가 다르더라도 가지고 있는 정보의 값이 같은 경우가 있는데, 이럴 때 두 인스턴스는 같은 객체라고 할 수 있습니다. 이런 경우를 위해 equals() 메서드를 재정의할 필요가 있습니다. 

String 클래스와 Integer 클래스에는 이미 equals() 메서드가 재정의되어 있습니다. 

str1과 str2는 서로 다른 인스턴스이기 때문에 str1==str2의 결과는 false입니다. 그러나 다음 라인에서 String 클래스의 equals() 메서드를 사용한 결과 str1과 str2가 같은 값을 가지고 있기 때문에 true가 출력되었습니다. Integer 클래스의 경우에도 같은 결과를 볼 수 있었습니다.

 

hash는 정보를 저장, 검색할 때 사용하는 자료 구조입니다. 해시 함수에 객체의 키 값을 매개변수 값으로 넣으면 그 객체가 저장된 위치를 반환합니다. hashCode() 메서드도 equals() 메서드와 마찬가지로 String 클래스와 Integer 클래스에 각각 재정의되어 있습니다. 

 

clone() 메서드는 객체를 복제해주는 메서드입니다. 원 객체와 복제되어 반환된 객체는 같은 변수 값과 다른 주소 값을 가졌습니다.

 

  • String 클래스에 대해 배웠습니다.

String 클래스를 사용해 문자열을 사용할 때, 문자열을 생성자의 매개변수로 해 생성하는 방식과 이미 생성된 문자열 상수를 가리키는 방식을 사용할 수 있습니다.

 

문자열을 생성자의 매개변수로 할 때 new 예약어를 사용하는데, 이 경우에는 문자열을 위한 메모리가 할당되고 그 위에 새 객체가 생성됩니다.

 

생성자를 이용하지 않는 경우에는 이미 만들어져 있는 문자열 상수의 메모리 주소를 가리키게 되는데, 이런 만들어진 상수값들이 저장된 공간을 상수 풀이라고 합니다. 

 

 

다른 프로그래밍 언어에서 문자열을 생성할 때 문자(char) 배열을 사용하는데, 자바에서는 String 클래스를 사용해 배열 없이도 편하게 문자열을 사용할 수 있습니다. 그런데 이런 방식은 문자열을 한 번 생성하면 변경할 수 없다는 단점을 가지고 있습니다. 이를 해결하기 위해 StringBuffer 클래스와 StringBuilder 클래스를 사용합니다. 

 

StringBuffer 클래스와 StringBuilder 클래스는 변경 가능한 char[]를 변수로 가지고 있어 문자열끼리 연결하거나 이미 생성된 문자열을 변경할 수 있습니다. StringBuffer 클래스는 문자열의 안전한 변경을 보장해주고, StringBuilder 클래스는 안전한 변경을 보장하지 않는다는 차이점이 있습니다. 

StringBuilder 클래스는 다음과 같이 사용할 수 있습니다.

 

Wrapper 클래스에 대해 배웠습니다.

정수를 사용할 때 기본형이 아닌 객체형으로 사용해야 하는 경우, Wrapper 클래스를 사용해 기본 자료형을 감싸 사용할 수 있습니다.

기본형 Wrapper 클래스
boolean Boolean
byte Byte
char Character
short Short
int  Integer
long Long
float Float
double Double

예를 들어 int는 크기 4바이트의 기본 자료형이지만 Integer는 생성자로 호출해야 하는 클래스입니다. 

다른 형태기 때문에 두 변수를 연산하기 위해서는 형태를 일치시켜야 했었지만, 자바 5부터는 자동으로 언박싱, 오토박싱이 이루어져 형태 변환 없이 연산에 사용할 수 있게 되었습니다.

 

  • Class 클래스에 대해 배웠습니다. 

프로그래밍 하면서 잘 모르는 클래스의 정보를 사용할 때 Class 클래스를 활용합니다. 이때 Class 클래스를 선언하고 클래스 정보를 가져오는 방법은 세 가지가 있습니다.

1) Object 클래스의 getClass() 메서드 사용하기 : 이미 생성된 인스턴스가 있어야 사용할 수 있습니다.

2) 클래스 파일 이름을 Class 변수에 직접 대입

3) Class.forNamte("클래스 이름") 메서드 사용