Skip to content

String, 변수에 대해서 #2

@ekzot1212

Description

@ekzot1212

🎯 학습 주제

  • String, 변수에 대해서


📖 학습 내용

주요 학습 포인트

🔹 변수 (Variables)

  • 변수 선언 방식

    • Lua: local x = 10 (동적 타입)
  • 전역 변수 vs 지역 변수

    • Lua에서 local 없이 선언하면 기본적으로 전역 변수 (x = 10)
  • 불변 변수

    • Lua에는 final 같은 불변 변수 개념이 없음
  • 객체 참조 방식

    • Lua에서는 변수에 할당되는 값이 기본적으로 참조 방식으로 동작함.
      즉, 변수에 복합 데이터 (테이블 등)를 할당하면 변수에는 데이터의 참조(메모리 주소)가 저장됨.
    • 기본 데이터 타입 (숫자, 문자열 등)은 값 복사로 동작하지만, 문자열은 불변이기 때문에 변경 시 항상 새로운 문자열이 생성됨.
  • 값 복사 vs 참조 복사

    • 기본 타입 (숫자, 불리언 등): 값 복사가 발생
      local a = 10
      local b = a  -- b에 a의 값(10) 복사
      b = 20
      print(a)  -- 출력: 10 (b를 변경해도 a에는 영향 없음)
    • 테이블 타입 (참조 타입): 참조 복사가 발생
      local tableA = {1, 2, 3}
      local tableB = tableA  -- 참조 복사 발생
      tableB[1] = 100
      print(tableA[1])  -- 출력: 100 (tableB의 변경이 tableA에 영향을 줌)

🔹 문자열 (Strings)

  • 문자열 선언

    • Lua: s = "Hello" 또는 s = 'Hello'
  • 불변성 (Immutable)

    • Lua에서 문자열은 불변(Immutable)

    • 문자열은 한 번 생성되면 변경이 불가능하며, 수정하는 경우 항상 새로운 문자열이 메모리에 할당됨

      local s1 = "Hello"
      local s2 = s1 .. " World"  -- 새로운 문자열이 메모리에 할당
      print(s1)  -- "Hello"
      print(s2)  -- "Hello World"
  • 메모리 관리 (참조 복사와 문자열)

    • Lua에서 문자열은 값 복사처럼 보이지만 사실 참조 기반으로 최적화됨
    • 동일한 문자열이 메모리에 중복으로 저장되지 않으며, 같은 문자열 값은 하나의 메모리 참조로 공유됨
    • 하지만 문자열을 변경하거나 이어붙이면 항상 새로운 메모리 블록에 새로운 문자열이 생성됨
    • 자바처럼 메모리를 효율적으로 사용하기 위해서임
  • 문자열 길이

    • Lua: #s 사용
  • 문자열 연결 (Concatenation)

    • Lua: s1 .. s2 (.. 연산자)
  • 부분 문자열 추출

    • Lua: string.sub(s, 2, 4)
  • 문자열 비교

    • Lua: == 사용 시 값 비교 (참조가 아닌 내용 비교)

🛠 코드 예제

✅ 변수 선언과 참조 복사

-- 값 복사 (기본 타입)
local a = 10
local b = a
b = 20
print(a) -- 10 (b의 변경이 a에 영향을 주지 않음)

-- 참조 복사 (테이블)
local tableA = {1, 2, 3}
local tableB = tableA
tableB[1] = 100
print(tableA[1]) -- 100 (참조 복사이므로 같은 메모리 공간 공유)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions