새소식

Java/제대로 파는 자바

[제대로 파는 자바 (Java)-by 얄코] 문자열 자료형과 기초 사용법

  • -

해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.

 

 

  • 0개 ~ 다수의 문자들로 구성
  • " " 로 둘러쌈
  • 이제까지 배운 자료형들은 데이터 하나에 지정된 메모리 바이트가 있는 원시 자료형이었으나 (int : 4바이트)
    문자열은 문자가 몇 개 들어갈지 모르기 때문에 참조 자료형
      -  그러나 특별히 원시값과 유사하게 사용될 수 있음
//  리터럴 방식
String str1 = "Hello World!";
String str2 = "안녕하세요 😆 반갑습니다~ 🖐️🖐️🖐️";

// 빈 문자열 가능
String str3 = "";

//  인스턴스 생성 방식
String str4 = new String("나중에 자세히 배웁니다.");

 

 

▼ 클래스의 인스턴스

  • 일단, 단순 값 뿐 아니라 특정 기능들을 가진 무언가로 이해할 것
  • 객체지향 섹션에서 상세히 다룸


 

 

▶ 리터럴 방식으로 생성한 문자열끼리는 ==을 사용하여 비교가 가능함

 

 

 

▶ 인스턴스는 ==을 사용하여 비교 X!!!

"Hello"라는 같은 문자열을 가지지만 hl3과 hl4를 ==로 비교 시 false가 나옴

 

 

 

▶ 인스턴스와 비교하려면 .equals 메소드를 사용해야 함

(특별한 경우가 아니면 어떤 방식으로 생성했든 문자열은 .equals로 비교할 것)

※ .equalsIgnoreCase : 대소문자 구분없이 문자열 비교

.equals로 비교 시 리터럴 생성 방식이든 인스턴스든 관계없이 예상과 동일한 결과를 얻을 수 있음

 

 

※ 왜 그럴까?! ※ 

 

 

== : 동일한 주소값을 가지는가?

equals : 주소값에 상관없이 동일한 내용을 가지는가?

  • 리터럴로 생성 시
    : String constant pool 내에 중복 없이 저장되기 때문에 같은 내용의 문자열에 대해 동일한 주소값을 가지게 됨
  • 객체 인스턴스 생성 시
    : 그 외의 영역에 매 번 새로 생성 되어 각각 따로 저장됨(다른 주소값을 가짐)

 

 

▲ 자바에서 string과 같은 참조 자료형을 =으로 다른 곳에 대입하면 동일한 주소값을 주는 것임
(같은 곳을 가리킴)

hl5는 hl4와 동일한 주소값을 가지게 됨

 

리터럴로 생성한 hl1과 hl2는 동일한 주소값을 가지며, 객체 인스턴스 hl3과 hl4는 각각 다른 주소값을 가지는 것을 볼 수 있음. 또한 String hl5 = hl4;이므로 둘은 동일한 주소값을 가짐

 

 

▶ 리터럴로 선언했어도 객체 인스턴스로 만들어지기 때문에 객체의 기능이 메소드 사용 가능

String str_a1 = "안녕";
boolean bool_a1 = str_a1.equals("안녕");  //true

//  💡 리터럴로 선언했어도 객체 인스턴스로 만들어짐
//  때문에 객체의 기능인 메소드 사용 가능
boolean bool_a2 = "안녕".equals("안녕");  //true
boolean bool_a3 = "안녕".equals(str_a1);  //true

 


 

 

문자열에서는 문자열을 이어붙이는 용도로 +, += 연산자만 사용 가능하고 -, *, /, -=, *=, /= 사용불가!

 

 

▶ + 연산자: 이어붙여진 결과를 반환

String str_b1 = "Hello, ";
String str_b2 = "World!";

// + 연산자: 이어붙여진 결과를 반환
String str_b3 = str_b1 + str_b2;   //"Hello, World!"

 

 

 

▶ += 연산자 (상수에는 적용 불가!)

	//  += 연산자:(-= *= /= 불가!)
        //  1. ⭐️ 해당 변수에 문자열을 이어붙임 (부수효과)
        String str_c1 = "나는 아무 생각이 없다. ";
        str_c1 += "왜냐하면 ";


        //  2. 그 결과를 반환
        String str_c2 = str_c1 += "아무 생각이 없기 때문이다.";
        // str_c2와 str_c1 모두 "나는 아무 생각이 없다. 왜냐하면 아무 생각이 없기 때문이다."

        boolean bool_c = (str_c1).equals(str_c2);  //true

        //  ⚠️ 상수에는 적용할 수 없음
        final String str_d = "헬로";
//        str_d += "월드";   //불가!!!

 

 

 

▶ 문자열에 다른 자료형을 더하면 문자열로 이어붙여짐

int intNum = 123;
float fltNum = 3.14f;
boolean bool = true;
char character = '가';

String str_d1 = "자, 이어붙여볼까요? ";

//  💡 문자열에 다른 자료형을 더하면 문자열로 이어붙여짐
//텍스트로 바꿔서 쭉 이어붙여버림
String str_d2 = str_d1 + intNum + fltNum + bool + character;
//  "자, 이어붙여볼까요? 1233.14true가"

 


 

 

 

String.valueOf()를 사용하여 타 자료형을 문자열로 변환 가능

        //  💡 타 자료형으로부터 문자열로 변환
        String str1 = String.valueOf(true);  //불리언
        String str2 = String.valueOf(false);  //불리언
        String str3 = String.valueOf(123);  //정수
        String str4 = String.valueOf(3.14f);  //실수
        String str5 = String.valueOf('가');  //문자

 

 

▶ 빈 문자열을 더해주어 암묵적으로 문자열로 변환 가능

 

 

자료형 클래스.parse자료형이름(문자열)을 사용하여 문자열을 타 자료형으로 변환 가능

 

  boolean 자료형은 대소문자 무관하게 'true'일 때만 true를 반환함

 

  문자열 내 n번째 문자 반환 시 charAt(n) 사용

 

 

런타임 에러 : 컴파일러가 걸러내지 못하는 에러 (프로그램 실행 중에 발생)

        //  ⚠️ 런타임 에러 발생 (컴파일 완료 후 실행 단계에서 오류 발생)
        //  '실행'으로 테스트하거나, 디버그 후 콘솔 탭에서 확인해볼 것
//        byte bytNum2 = Byte.parseByte("12345");  //바이트 범위 넘음
//        int intNum2 = Integer.parseInt("123.45");  //정수가 아닌 실수임
//        double dblNum2 = Integer.parseInt("하나");  //숫자가 아닌 문자임

 


 

 

이스케이프 표현 대체
\" 큰따옴표
\' 작은따옴표
\n 줄바꿈
\t
\\ 백슬래시 하나

 

 

String str = "문자열에 \"큰따옴표\"도,\n엔터도 넣을 수 있다고?";
System.out.println(str);

 

\"와 \n 사용

 

 

String table = "언어\t\t종류\t\t\t\t자료형\nJava\tcompiled\t\t정적\nPython\tinterpreted\t\t동적";
System.out.println(table);

 

\t과 \n 사용

 

 

char singleQuote = '\'';
System.out.println(singleQuote);

 

\' 사용

 

 

String path = "C:\\Document\\MyCodings";
System.out.println(path);

 

\\ 사용

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.