[JAVA] String이란?

popolarburr·2023년 2월 27일
0
post-thumbnail

2. String

String은 문자열이라고 불리는 클래스이다. 그렇다면 문자열은 무엇일까?


String name = "김동우";
String address = "서울시";

이와같이 char형 변수가 이어진 형태를 의미한다.

또한 자바에서 String은 클래스이기때문에 자바의 기본 자료형에 속하지 않는다.


  • 특징 :
    1. 불변성 : 자바에서 String은 불변하는 특징이 있다. 처음 만들어진 String은 그 자체로 어딘가에 저장되고, 거기에 추가될떄는 새로운 String값으로 새로운 곳에 저장된다. 즉, 변화하지 않고 새로운 값이 저장되고 그 값을 가리키게 되는 것이다 .

    2. 공유성 : 같은 값을 가진 String 변수들은 같은 값을 바라보고, 공유한다. 그렇기 떄문에 1번인 불변성도 유지가 된다.

      String a = "*";
      String b = "*";

      이 코드에서 a와 b는 둘 다 동일한 주소에 있는 “*”를 바라보고 있고, a에 값을 더하거나 바꾼다고 하면 새로운 값을 만들고 a는 그 값을 가리키게 되는 것이다.

      근데 이렇게 하면 자바 입장에선 효율적인 메모리 관리가 안될 것이다. 그렇기에 떄문에 추천하는것이

      StringBuilder sb = new StringBuilder();

      StringBuilder는 내부적으로 큰 칸을 하나 만들고 거기에 추가하는 느낌으로, 메모리를 아낄 수 있고 속도가 빠르다 .

    3. 객체 : String은 객체이다. 객체이기에 ==에 대한 비교를 통해 하지말고 .equls()메소드를 사용하자.


그렇다면 객체를 가끔 직접적으로 호출할때 사용하는 toString()은 뭘까?


우선 코드를 보자.

```java
public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p);
				// 출력 : 메롱

        Lion l = new Lion();
        System.out.println(l);
				// 출력 : 멋쟁이사자처럼
    }
}

class Lion extends Object {
    private String name = "멋쟁이사자처럼";

    @Override
    public String toString() {
        return "Lion{" +
                "name='" + name + '\'' +
                '}';
    }
}

class Person extends Object {

    public String toString() {
        return "메롱";
    }
}
```

여기서 Main 함수에서 각각의 클래스의 객체를 만들고 호출했다.

p를 출력하면 메롱, l은 멋쟁이사자처럼이 나온다. 어떻게 이런 결과가 나올까?


우선 System.out.println()에 대해서 알아야한다.

우리는 흔히들 출력문이라고 하는데, 이 출력문은 문자열화 시켜서 콘솔창에 띄어주는 전통? 방식?을 사용한다. 즉 우리가 숫자 5를 출력했다하더라도 콘솔창에서는 “5”(문자화)되어 사용된다.


그렇기에 System.out.println()을 사용해서 객체 리모콘을 그대로 출력한다고 하면 어떻게 할까?


출력문은 문자열화한다 했기에 객체로 문자열화시켜서 출력시킨다.


이 때 사용되는 것이 toString()이다. 모든 클래스는 Object에 상속을 받아 사용하고 있고, 이 클래스엔 toString()이란 메소드가 있는데, 객체 자체를 출력하고 오버라이딩되어 있으면 커스터마이징하여 객체를 출력할 수 있다.


결론 : 객체를 출력할 떄 toString을 사용하는데, 이게 override되어 있으면 커스터마이징된 출력값을 출력하고 아니면 객체이름과 주소값을 출력한다.


[출처] : 개인공부저장소

profile
차곡차곡

0개의 댓글