-
조금 특별한 타입: String각종 학습 요약/Java 2022. 5. 6. 21:55
String 객체, 그리고 참조 타입
참조타입이란 말은 낯설 수 있다. 아직 자세히 알아보지 않을 거니까 괜찮다.
다만 지금은 String이 참조타입이란 걸 이야기하고 싶은 것이니, 그 정도만 알아두자.String은
지난 번 살펴봤듯 Java에서 기본적으로 주어지는 자료형(원시타입, primitive type)은
int(숫자)
,byte(숫자)
,short(숫자)
,long(숫자)
,double(소수)
,float(소수)
,boolean(참/거짓)
,char(문자(한 글자))
가 있다.
그 중에 문자를 표시하는char
가 있긴 하지만, 딱 한 자의 문자밖에 표현할 수가 없다. 프로그램을 제어하다 보면 여러 글자가 이어진 문자열을 제어할 필요성을 많이 느낄 수 있다. 이 글만 해도 한글자로는 적을 수 없고, 이렇게 긴 문장으로 적어야 하니까.
그럴때 사용할 수 있는 것이 String 타입이다.참조 타입이지만
사실 Java의 모든 객체(class)는 타입이 될 수 있다. 무슨 말이냐고? (아직) 몰라도 된다.
다만 모든 객체가 타입이 될 수 있다는 말은 읽어보면 좋겠다. 나중에 "잘 모르겠는데"라고 말하는 건 괜찮지만 "처음 듣는데?"라고 하면 곤란하다.Java에서 기본타입을 뺀 모든 자료형은 전부 다 참조 타입이다.
참조 타입이란 말은 말 그대로 '참조형 타입'이라는 말이다. Java 안에서 '참조'란 인스턴스(new로 실체화 된 실체)의 주소를 바라보는 것을 말한다.
String은 참조 타입이다. 하지만 String 타입의 변수를 선언할 때는 다음과 같이 하지 않는다.
String str = new String(); // 1번 방식
보통은 이렇게 한다.
String str = "새로운 문자열 입니다."; // 2번 방식
이렇게 말이다. 왜 1번 방식으로 하지 않고 2번 방식으로 할까?
엄밀히 말하자면 1번 2번 둘 다 가능하다. 보통의 객체는 1번 방식으로 생성하지만, 2번 방식이 더 편할 뿐이다.
그렇다. 2번이 더 편하다. String은 아주 빈번하게 쓰이는 타입이고, 그래서 편하게 사용할 수 있는 방법, 마치 일반적인 원시자료형(primitive type)을 정의하듯이 사용할 수 있어야 한다. 그래서 String만 특별히 2번과 같은 사용방식을 허용하고, 훨씬 자주 쓰이게 되었다.리터럴과 객체
각설하고 말하자면, 2번 방식의 문자열은 리터럴이다.
리터럴이 뭔지를 말하는 것은 꽤나 복잡한 일이다(그리고 구글링을 하면 쉽게 찾아볼 수 있을 것이다).
하지만 리터럴이 뭔지를 말하는 건 아주 쉬운 일이다.
리터럴 String은 'new' 연산자를 통해서 만든 String 인스턴스와는 다르다.
둘 다 String 클래스의 메소드를 사용한다든지, 필드에 접근한다든지, 사용은 똑같이 할 수 있다.
하지만 그 본질이 다르다. 리터럴은 String 상수풀에 존재하고,new String()
은 힙(heap)에 존재한다.
뭐가 다른지 지금 알 필요는 없지만, 분명히 차이가 있다는 것만큼은 알고 있어야 한다. 왜냐? 나중에 배워야 하니까......'각종 학습 요약 > Java' 카테고리의 다른 글
Java: 제네릭 Generic (4) 2022.05.17 추상클래스와 인터페이스의 차이와 선택 기준 (0) 2022.05.13 # Java의 상속 개념 : inheritance, composite (2) 2022.05.12 Java: 생성자(Constructor)의 기본적인 이해 (0) 2022.05.11 클래스와 인스턴스의 관계 이해하기 (0) 2022.05.10 객체지향프로그래밍(OOP) 개념의 기초적인 이해 (0) 2022.05.10