자바 스크립트의 String

2025. 4. 12. 16:56·JavaScript

1. 문자열이란? 

정의 및 특징:

  • 문자열(String)은 문자들의 순서 있는 모음으로 이루어진 자료형입니다.
  • 작은따옴표(' '), 큰따옴표(" "), 또는 백틱(`)으로 감싸서 표현할 수 있습니다.
  • 백틱(`)을 사용한 방식을 템플릿 리터럴(Template Literal)이라고 하며, 여러 줄 문자열 작성 및 문자열 내 변수/표현식 삽입(${...})이 용이합니다.
  • let name = "개발자"; let message = 안녕하세요, ${name}님! 오늘도 즐거운 코딩하세요!; console.log(message);

가장 중요한 특징: 불변성(Immutability) immutable 
JavaScript 문자열은 불변(immutable)합니다. 즉, 한 번 만들어진 문자열은 그 내용을 직접 수정할 수 없습니다. 문자열을 변경하려면 항상 새로운 문자열을 만들어야 합니다.

2. 문자열 생성과 초기화

  • 리터럴 할당: 가장 흔한 방법! 따옴표나 백틱으로 값을 직접 할당합니다.
const greeting = "Hello!"; const lang = 'JavaScript';
  • String() 함수 사용: 다른 타입의 값을 문자열로 명시적으로 변환할 때 사용합니다. 
const year = 2025;
const yearStr = String(year); // 숫자 2025 ->문자열 "2025"
console.log(yearStr); // 출력: "2025"
console.log(typeof yearStr); // 출력: "string"
  • 빈 문자열: 값이 없는 문자열도 가능합니다.
const empty = "";

 

3. 인덱싱과 불변성

인덱싱: 한 글자씩 접근하기

문자열의 각 문자는 0부터 시작하는 인덱스를 가집니다. 대괄호([])로 접근할 수 있어요.

const text = "Code";
console.log(text[0]); // 출력: C
console.log(text[1]); // 출력: o
console.log(text.length); // 출력: 4

 

  • charAt(index) 메서드도 같은 역할을 합니다.
console.log(text.charAt(0)); // 출력: C

 

  • 없는 인덱스에 접근하면?
대괄호 []: undefined 반환
charAt(): 빈 문자열 "" 반환
const text = "JavaScript";
console.log(text[10]); // 출력: undefined
console.log(text.charAt(10)); // 출력: ""

 

 

값 수정? (불가능!)

  • 다시 한번 강조! 문자열은 불변(immutable)합니다. 인덱스로 접근해서 값을 바꾸려고 해도 바뀌지 않아요.
let myStr = "abc";
myStr[0] = "d"; // 시도해도 오류가 나거나 조용히 무시됨
console.log(myStr); // 출력: abc (그대로!)

 

 

  • 값을 바꾸려면, 기존 문자열을 조작해서 새로운 문자열을 만들어야 합니다.
let myStr = "abc";
myStr = "d" + myStr.slice(1); // 'd'와 'bc'를 합쳐 새 문자열 생성
console.log(myStr); // 출력: dbc

4. 주요 메서드 

JavaScript는 문자열을 다루는 편리한 메서드를 많이 제공합니다.


slice(startIndex, [endIndex]) - 원하는 부분만 싹둑!

  • 문자열의 일부를 추출하여 새 문자열로 반환합니다.
  • startIndex: 추출 시작 위치 (포함)
  • endIndex (선택 사항): 추출 끝 위치 (미포함, 생략 시 끝까지)
  • 음수 인덱스도 가능해요! const message = "JavaScript is fun!";
  • console.log(message.slice(11)); // 출력: "is fun!"
  • console.log(message.slice(0, 10)); // 출력: "JavaScript"
  • console.log(message.slice(-4)); // 출력: "fun!" 반환값: String (추출된 새 문자열) 원본 변경: No

toUpperCase() / toLowerCase() - 대소문자 변신!

  • toUpperCase(): 모든 알파벳을 대문자로!
  • toLowerCase(): 모든 알파벳을 소문자로!
  • const mixedCase = "Hello World";
  • console.log(mixedCase.toUpperCase()); // 출력: "HELLO WORLD"
  • console.log(mixedCase.toLowerCase()); // 출력: "hello world" 반환값: String (변환된 새 문자열) 원본 변경: No

trim() / trimStart() / trimEnd() - 깔끔하게 공백 제거!

  • trim(): 양쪽 끝 공백(스페이스, 탭, 줄바꿈 등) 제거.
  • trimStart() (또는 trimLeft()): 시작(왼쪽) 공백 제거.
  • trimEnd() (또는 trimRight()): 끝(오른쪽) 공백 제거.
  • const padded = " Look at this! ";
  • console.log('${padded.trim()}'); // 출력: "'Look at this!'"
  • console.log('${padded.trimStart()}'); // 출력: "'Look at this! '"
  • console.log('${padded.trimEnd()}'); // 출력: "' Look at this!'" 반환값: String (공백 제거된 새 문자열) 원본 변경: No

replace(searchValue, newValue) / replaceAll(searchValue, newValue) - 찾아서 바꾸기!

  • replace(): searchValue를 찾아 newValue로 바꾼 새 문자열 반환. 기본적으로 첫 번째 일치 항목만.
  • replaceAll() (ES2021): 모든 일치 항목을 바꿉니다.
  • const phrase = "apple banana apple";
  • console.log(phrase.replace("apple", "orange")); // 출력: "orange banana apple" console.log(phrase.replaceAll("apple", "orange")); // 출력: "orange banana orange" 반환값: String (대체된 새 문자열) 원본 변경: No

split([separator]) - 기준점 맞춰 나누기! (배열 반환)

  • 문자열을 separator 기준으로 나누어 새로운 배열로 만들어 반환합니다.
  • const tags = "javascript,react,node";
  • console.log(tags.split(",")); // 출력: ["javascript", "react", "node"]
  • const sentence = "I love coding"; console.log(sentence.split(" ")); // 출력: ["I", "love", "coding"]
  • const word = "HELLO"; console.log(word.split("")); // 출력: ["H", "E", "L", "L", "O"] 반환값: Array (나눠진 문자열들의 배열) 원본 변경: No
  • 💡 실전 활용: 입력 값 처리 (Node.js) 코딩 테스트 등에서 공백으로 구분된 여러 입력을 받을 때 아주 유용합니다.
  • // 입력 예시: 10 20
  • const fs = require("fs");
  • let input = fs.readFileSync(0).toString().trim(); // "10 20"
  • const parts = input.split(" "); // ["10", "20"]
  • const num1 = Number(parts[0]); // 10
  • const num2 = Number(parts[1]); // 20
  • console.log(num1 + num2); // 출력: 30

 

indexOf(searchValue, [fromIndex]) - 어디있니? 위치 찾기! (인덱스 반환)

  • 문자열 내에서 searchValue가 처음 나타나는 위치의 인덱스를 반환합니다.
  • 찾는 내용이 없으면 -1을 반환합니다.
  • const phrase = "Learning JavaScript is fun!";
  • console.log(phrase.indexOf("JavaScript")); // 출력: 9
  • console.log(phrase.indexOf("a")); // 출력: 1
  • console.log(phrase.indexOf("a", 5)); // 출력: 10
  • console.log(phrase.indexOf("Python")); // 출력: -1 반환값: Number (찾은 인덱스 또는 -1) 원본 변경: No

5. 특수 문자 (Escape Characters) escapesequence

문자열 안에 줄바꿈이나 탭, 또는 따옴표 자체를 넣고 싶을 때 이스케이프 시퀀스를 사용합니다. 백슬래시()와 특정 문자를 조합합니다.

주요 특수 문자:

  • \n : 줄 바꿈 (New Line)
  • \t : 수평 탭 (Tab)
  • \ : 백슬래시 \ 문자 자체
  • ' : 작은따옴표 ' 문자 자체
  • " : 큰따옴표 " 문자 자체

예시:

// 줄 바꿈

const multilineStr = "안녕하세요.\nJavaScript를 배워봅시다.";

console.log(multilineStr);

/* 출력:

안녕하세요.

JavaScript를 배워봅시다.

*/

 

// 탭
const tabStr = "이름\t나이";
console.log(tabStr); // 출력: 이름    나이

// 백슬래시
const path = "C:\\Users\\Public";
console.log(path); // 출력: C:\Users\Public

// 따옴표
const quote1 = '그는 말했다, \'안녕!\'';
const quote2 = "그녀는 말했다, \"반가워!\"";
console.log(quote1); // 출력: 그는 말했다, '안녕!'
console.log(quote2); // 출력: 그녀는 말했다, "반가워!"

따옴표 사용 꿀팁: 문자열을 감싸는 따옴표와 다른 종류의 따옴표를 내부에서 사용하면, 이스케이프 문자를 쓰지 않아도 됩니다! console.log("따옴표 안에 '작은따옴표' 넣기");

console.log('따옴표 안에 "큰따옴표" 넣기');


6. 마무리 정리 

  • 문자열은 문자들의 순서 있는 집합이며, '', "", `` 로 표현됩니다.
  • JavaScript 문자열은 불변(Immutable)합니다. (수정 시 새 문자열 생성)
  • 인덱스 ([ ] 또는 charAt())로 개별 문자에 접근할 수 있습니다.
  • 다양한 내장 메서드(slice, replace, split, trim, toUpperCase 등)를 활용하여 문자열을 효과적으로 다룰 수 있습니다.
  • 이스케이프 시퀀스(\n, \t 등)를 사용하여 특수 문자를 표현합니다.
  • 템플릿 리터럴 (...${}...)은 문자열 작성과 변수 삽입을 매우 편리하게 해줍니다.
저작자표시 (새창열림)

'JavaScript' 카테고리의 다른 글

배열의 범위 기반 for문, forEach()  (1) 2025.04.13
map을 이용한 배열의 각 요소 접근  (0) 2025.04.13
readFileSync 를 이용한 입력  (0) 2025.04.11
console.log의 인자  (0) 2025.04.11
동등 연산자, 일치 연산자  (0) 2025.04.11
'JavaScript' 카테고리의 다른 글
  • 배열의 범위 기반 for문, forEach()
  • map을 이용한 배열의 각 요소 접근
  • readFileSync 를 이용한 입력
  • console.log의 인자
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (124)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (13)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      슬라이딩 윈도우
      문자열
      해시
      역참조
      데드락
      context switching
      누적합
      dfs
      dp
      스레드
      프로세스
      참조자
      그리디
      투포인터
      브루트포스
      메모리구조
      우선순위 큐
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    자바 스크립트의 String
    상단으로

    티스토리툴바