클래스
자바는 객체지향언어인데 객체를 만들기 위해서 반드시 클래스를 먼저 만들어야 한다.
클래스는 객체를 만들기 위한 일종의 틀이다.
public class Car{
} // Car 라는 클래스를 생성하는 코드
public class CarExam{
public static void main(String args[]){
Car b1 = new Car();
Car b2 = new Car();
}
}
new 연산자는 new연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들으라는 명령이며
메모리에 만들어진 객체를 인스턴스(instance) 라고도 하며
이렇게 만들어진 객체를 참조하는 변수가 b1, b2 이다.
위의 코드가 실행이 되면 Car 라는 객체가 2개가 만들어지고 각각의 객체를 참조하는 b1과 b2 변수가 선언된다.
참조타입
참조형 타입은 기본형 타입을 제외한 모든 타입이며 배열은 참조형 클래스도 참조 타입이다.
참조형 변수 : String str = new String("Hello");
위와 같이 선언을 한다면 str 변수 앞에 기본형 타입이 아닌 String 클래스가 적혀있는데
이퀄 (=) 뒤에는 new 다음에 생성자라는 것이 있다.
new라는 키워드는 객체를 메모리에 올려주며 이렇게 메모리에 올라간 객체를 위에서 말한 것 처럼
인스턴스라고 한다.
메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스 하는 변수가 str이며 참조한다.
레퍼런스 한다라는 것은 변수가 인스턴스를 가지고 있는게 아니라 말그대로 가리킨다는 의미이다.
str이라는 변수에는 메모리의 위치 값이 저장되는 것이며 메모리의 위치값이 저장된다고 해도
어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법은 없다.
그렇기 때문에 str변수는 String 인스턴스를 참조한다라고만 알면 된다.
String 클래스
String 클래스는 문자열을 표현하는 자바에서 가장 많이 사용하는 클래스이다.
String str1 = "Hi";
String str2 = "Hi";
// 위의 코드는 new 연산자를 이용하지 않고 인스턴스를 만든 경우이다.
// "hi" 라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장이 된다. (상수는 변하지 않는 값이다)
// String str2 = "bye"; 이 코드가 실행이 될 때 hi라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조한다.
String str3 = new String("hi");
String str4 = new String("hi");
// 위의 코드는 new연산자를 이용해서 인스턴스를 만든 경우이며
// new연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.
// String str4 = new String("hi"); 이 코드가 실행될 때에도 새롭게 만들게 되며 str3과 str4는 서로 다른 인스턴스를 참조한다.
if(str1 == str2) {
System.out.println("str1과 str2는 같은 레퍼런스");
}
// str1과 str2는 서로 같은 인스턴스를 참조하므로 결과는 true 이다.
if(str1 == str3) {
System.out.println("str1과 str3은 같은 레퍼런스");
}
// str1과 str3은 서로 다른 인스턴스를 참조하므로 결과는 false이다.
if(str3 == str4) {
System.out.println("str3과 str4는 같은 레퍼런스");
// str3과 str4는 서로 다른 인스턴스를 참조하므로 결과는 false이다
위의 if문을 사용한 건 참조변수끼리 ==로 비교하면 서로 같은 것을 참조하는지 아닌지 비교할 수 있다.
String은 다른 클래스와는 다르게 new를 사용하지 않고 사용할 수 있으며 메모리를 아끼려면
String은 new를 사용하지 않고 사용하는 것이 좋다.
String은 불변 클래스이며 불변이란 String 이 인스턴스가 될 때 가지고 있던 값을 나중에 수정할 수 없다.
String은 문자열과 관련된 다양한 메소드를 가지고 있으며 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않으며 String이 가지고 있는 메소드 중 String 을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
String str5 = "Hello city";
String str6 = str5.substring(3);
// substring은 문자열을 자른 결과를 반환하는 메소드이며 해당 코드가 실행되도 str5는 변하지 않는다.
// str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조하게 된다.'Java' 카테고리의 다른 글
| 자바 수업 내용 간단 정리 (클래스 기능 및 사용법) (0) | 2022.08.16 |
|---|---|
| Java(자바) - 클래스에 대해서 알아보기(2) (0) | 2022.08.16 |
| Java(자바) - 배열(array) 알아보기 (0) | 2022.08.12 |
| Java(자바) - 연산자 알아보기 (0) | 2022.08.11 |
| Java(자바) - 변수,상수,기본형 알아보기 (0) | 2022.08.11 |
댓글