• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 기타게임 소스자료실
    • 기타게임 소스자료실 기타 ()
    • [Go 공식문서 한국어 정리] ⓪9. Go 슬라이스의 사용법과 내부 구조

      • 오뉴노노
      • 2026.05.30 - 01:15 3

    [Go 공식문서 한국어 정리] ⓪9. Go 슬라이스의 사용법과 낭부 구조

    원문 제목: Go Slices: usage and internals
    작성자: Andrew Gerrand

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 1. 서론 — 이 문서가 다루는 내용
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Go의 슬라이스(slice)는 타입화된 데이터 시퀀스를 다루는 편리하고 효율적인 수단입니다.
    다른 언어의 배열과 유사하지만 몇 가지 독특한 특성을 가집니다.
    이 문서에서는 슬라이스가 무엇인지, 어떻게 사용하는지, 그리고 내부적으로 어떻게 동작하는지 살펴봅니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 2. 핵심 개념
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ① 배열(Array) — 슬라이스의 기초
    슬라이스는 Go의 배열 위에 구축된 추상화입니다.
    배열은 길이와 요소 타입이 고정된 타입입니다. 예를 들어 [4]int는 4개의 정수 배열입니다.
    배열의 크기는 타입의 일부이므로 [4]int와 [5]int는 서로 다른 타입입니다.

    ② 슬라이스 — 배열 위의 강력한 추상화
    슬라이스 타입은 []T로 표현되며, T는 요소 타입입니다.
    배열과 달리 길이가 고정되지 않습니다.
    make 함수로 생성할 수 있으며, make([]T, len, cap) 형태를 가집니다.

    ③ 슬라이스 내부 구조 — 포인터, 길이, 용량
    슬라이스는 배열 세그먼트를 기술하는 구조체입니다.
    포인터(배열 시작 주소), 길이(세그먼트 내 요소 수), 용량(기본 배열의 최대 길이)로 구성됩니다.
    슬라이싱은 데이터를 복사하지 않고 새로운 슬라이스 값을 생성합니다.

    ④ 복사와 append — 슬라이스 확장
    copy 함수는 소스 슬라이스에서 대상 슬라이스로 데이터를 복사합니다.
    append 함수는 슬라이스 끝에 요소를 추가하며, 필요하면 용량을 자동으로 늘립니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 3. 주요 내용 상세
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Go에서 배열은 값(value)입니다.
    배열 변수는 전체 배열을 나타내며, 첫 번째 요소에 대한 포인터가 아닙니다(C와 다름).
    따라서 배열을 할당하거나 전달하면 내용 전체가 복사됩니다.

    슬라이스 리터럴은 배열 리터럴과 유사하지만 요소 개수를 생략합니다.
    letters := []string{"a", "b", "c", "d"}

    make 함수는 배열을 할당하고 해당 배열을 참조하는 슬라이스를 반환합니다.
    var s []byte
    s = make([]byte, 5, 5)
    // s == []byte{0, 0, 0, 0, 0}

    슬라이스의 제로 값은 nil입니다.
    len과 cap 함수는 nil 슬라이스에 대해 0을 반환합니다.

    슬라이싱은 기존 슬라이스나 배열에서 half-open range(반개구간)로 지정합니다.
    b := []byte{'g', 'o', 'l', 'a', 'n', 'g'}
    // b[1:4] == []byte{'o', 'l', 'a'}

    시작과 끝 인덱스는 선택적입니다. 기본값은 각각 0과 슬라이스 길이입니다.
    // b[:2] == []byte{'g', 'o'}
    // b[2:] == []byte{'l', 'a', 'n', 'g'}
    // b[:] == b

    s = s[2:4]와 같이 슬라이싱하면 새로운 슬라이스가 생성되지만 데이터는 복사되지 않습니다.
    따라서 재슬라이싱(re-slicing)으로 요소를 수정하면 원본 슬라이스의 요소도 변경됩니다.

    d := []byte{'r', 'o', 'a', 'd'}
    e := d[2:]
    // e == []byte{'a', 'd'}
    e[1] = 'm'
    // d == []byte{'r', 'o', 'a', 'm'}

    용량이 허용하는 한 슬라이스를 확장할 수 있습니다.
    s = s[:cap(s)]
    하지만 용량을 초과해서 확장하려면 런타임 패닉이 발생합니다.

    copy 함수는 소스와 대상 슬라이스 간 데이터를 복사합니다.
    서로 다른 길이의 슬라이스 간에도 복사 가능하며, 겹치는 슬라이스도 안전하게 처리합니다.

    용량을 늘리려면 더 큰 새 슬라이스를 만들고 기존 내용을 복사해야 합니다.
    t := make([]byte, len(s), (cap(s)+1)*2)
    copy(t, s)
    s = t

    append는 슬라이스 끝에 요소를 추가하는 내장 함수입니다.
    필요하면 자동으로 재할당하여 용량을 늘립니다.
    a := make([]int, 1)
    a = append(a, 1, 2, 3)

    한 슬라이스를 다른 슬라이스에 추가하려면 ...를 사용합니다.
    a := []string{"John", "Paul"}
    b := []string{"George", "Ringo"}
    a = append(a, b...)

    nil 슬라이스는 길이가 0인 슬라이스처럼 동작합니다.
    따라서 nil 슬라이스 변수에 append를 호출할 수 있습니다.

    재슬라이싱은 기본 배열을 복사하지 않습니다.
    따라서 작은 슬라이스가 큰 배열을 계속 참조하면 메모리 누수가 발생할 수 있습니다.
    FindDigits 함수 예시에서 파일 전체를 읽고 일부만 반환하면,
    반환된 슬라이스가 파일 전체를 메모리에 유지합니다.
    이를 방지하려면 copy로 필요한 데이터만 새 슬라이스에 복사해야 합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 4. 실전 활용 / 예시
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    슬라이스는 Go 코드에서 가장 많이 사용하는 데이터 구조입니다.
    JSON 디코딩, 데이터 필터링, 버퍼 관리 등 거의 모든 작업에서 슬라이스가 쓰입니다.
    append와 copy를 적절히 조합하면 메모리 효율적인 데이터 파이프라인을 구축할 수 있습니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 5. 정리
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    슬라이스는 배열 위의 가벼운 추상화입니다.
    포인터, 길이, 용량 세 가지 정보로 배열 세그먼트를 기술합니다.
    슬라이싱은 데이터 복사 없이 뷰를 생성하며, append와 copy로 동적 확장이 가능합니다.

    📎 출처 링크
    https://go.dev/blog/slices-intro

    #Go #Golang #slice #array #공식문서

    이 게시물을..
    N
    0
    0
    • [Rust 공식문서 한국어 정리] 150. Attribute Macros오뉴노노
    • 2
      오뉴노노

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] 184. PartialOrd 16 2026 06.08 [Rust 공식문서 한국어 정리] 183. Ord 13 2026 06.08 [Rust 공식문서 한국어 정리] 182. Eq 15 2026 06.08 [Rust 공식문서 한국어 정리] 181. PartialEq 15 2026 06.08 [Rust 공식문서 한국어 정리] 180. TryFrom 13 2026 06.08

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Rust 공식문서 한국어 정리] 150. Attribute Macros
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 490
    기본 (582) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 포인트 획득 공지
      5
      2026.04.24 - 19:48 4953 5
    • 링크 업로드 관련 공지
      8
      2026.03.25 - 21:56 4715 8
    • 인증메일 공지
      3
      2026.03.15 - 16:42 4606 3
    • 파일링크 및 인증메일 발송 관련 문의 안내
      9
      2026.03.14 - 22:03 5259 9
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5997
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7855 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 853
    582
    기타
    [Rust 공식문서 한국어 정리] 184. PartialOrd
    오뉴노노 2026.06.08 - 15:42 16
    581
    기타
    [Rust 공식문서 한국어 정리] 183. Ord
    오뉴노노 2026.06.08 - 15:42 13
    580
    기타
    [Rust 공식문서 한국어 정리] 182. Eq
    오뉴노노 2026.06.08 - 15:42 15
    579
    기타
    [Rust 공식문서 한국어 정리] 181. PartialEq
    오뉴노노 2026.06.08 - 15:42 15
    578
    기타
    [Rust 공식문서 한국어 정리] 180. TryFrom
    오뉴노노 2026.06.08 - 15:42 13
    577
    기타
    [Rust 공식문서 한국어 정리] 179. TryInto
    오뉴노노 2026.06.08 - 15:42 11
    576
    기타
    [Rust 공식문서 한국어 정리] 178. From
    오뉴노노 2026.06.08 - 15:39 14
    575
    기타
    [Rust 공식문서 한국어 정리] 177. Into
    오뉴노노 2026.06.08 - 15:39 9
    574
    기타
    [Rust 공식문서 한국어 정리] 176. AsRef
    오뉴노노 2026.06.08 - 15:39 5
    573
    기타
    [Rust 공식문서 한국어 정리] 175. Deref
    오뉴노노 2026.06.08 - 15:39 4
    572
    기타
    [Rust 공식문서 한국어 정리] 174. Default
    오뉴노노 2026.06.08 - 15:39
    571
    기타
    [Rust 공식문서 한국어 정리] 173. Clone
    오뉴노노 2026.06.08 - 15:38
    570
    기타
    [Rust 공식문서 한국어 정리] 172. Copy
    오뉴노노 2026.06.08 - 15:38
    569
    기타
    [Rust 공식문서 한국어 정리] 171. Drop
    오뉴노노 2026.06.08 - 15:38
    568
    기타
    [Rust 공식문서 한국어 정리] 170. Weak
    오뉴노노 2026.06.08 - 15:37
    567
    기타
    [Rust 공식문서 한국어 정리] 169. Arc
    오뉴노노 2026.06.08 - 15:37
    566
    기타
    [Rust 공식문서 한국어 정리] 168. Rc
    오뉴노노 2026.06.08 - 15:37
    565
    기타
    [Rust 공식문서 한국어 정리] 167. Box
    오뉴노노 2026.06.08 - 15:36
    564
    기타
    [Rust 공식문서 한국어 정리] 166. str
    오뉴노노 2026.06.08 - 15:36
    563
    기타
    [Rust 공식문서 한국어 정리] 165. String
    오뉴노노 2026.06.08 - 15:36
    562
    기타
    [Rust 공식문서 한국어 정리] 164. HashMap
    오뉴노노 2026.06.08 - 15:36 1
    561
    기타
    [Rust 공식문서 한국어 정리] 163. Vec
    오뉴노노 2026.06.08 - 15:35
    560
    기타
    [Rust 공식문서 한국어 정리] 162. Result
    오뉴노노 2026.06.08 - 15:35
    559
    기타
    [Rust 공식문서 한국어 정리] 161. Option
    오뉴노노 2026.06.08 - 15:35
    558
    기타
    [Rust 공식문서 한국어 정리] 160. Iterators
    오뉴노노 2026.06.08 - 15:35
    557
    기타
    [Rust 공식문서 한국어 정리] 159. Closures
    오뉴노노 2026.06.08 - 15:35
    556
    기타
    [Rust 공식문서 한국어 정리] 158. Trait Objects
    오뉴노노 2026.06.08 - 15:34
    555
    기타
    [Rust 공식문서 한국어 정리] 157. Lifetimes
    오뉴노노 2026.06.08 - 15:34 1
    554
    기타
    [Rust 공식문서 한국어 정리] 156. Cargo.lock
    오뉴노노 2026.06.08 - 15:34
    553
    기타
    [Rust 공식문서 한국어 정리] 155. Cargo.toml
    오뉴노노 2026.06.08 - 15:34 1
    552
    기타
    [Rust 공식문서 한국어 정리] 154. Workspaces
    오뉴노노 2026.06.08 - 15:34
    551
    기타
    [Rust 공식문서 한국어 정리] 153. Crates
    오뉴노노 2026.06.08 - 15:33
    550
    기타
    [Rust 공식문서 한국어 정리] 152. Modules
    오뉴노노 2026.06.08 - 15:33
    549
    기타
    [Rust 공식문서 한국어 정리] 151. Proc Macros
    오뉴노노 2026.06.08 - 15:32 1
    548
    기타
    [Rust 공식문서 한국어 정리] 150. Attribute Macros
    오뉴노노 2026.06.08 - 15:32
    547
    기타
    [Rust 공식문서 한국어 정리] 149. cfg
    오뉴노노 2026.06.08 - 15:32
    546
    기타
    [Rust 공식문서 한국어 정리] 148. assert
    오뉴노노 2026.06.08 - 15:31
    545
    기타
    [Rust 공식문서 한국어 정리] 147. panic
    오뉴노노 2026.06.08 - 15:27
    544
    기타
    [Rust 공식문서 한국어 정리] 146. Error
    오뉴노노 2026.06.08 - 15:24
    543
    기타
    [Rust 공식문서 한국어 정리] 145. Any
    오뉴노노 2026.06.08 - 15:22
    542
    기타
    [Rust 공식문서 한국어 정리] 144. Unpin
    오뉴노노 2026.06.08 - 15:19
    541
    기타
    [Rust 공식문서 한국어 정리] 143. Pin
    오뉴노노 2026.06.08 - 15:17 2
    540
    기타
    [Rust 공식문서 한국어 정리] 142. LazyLock
    오뉴노노 2026.06.08 - 15:14 1
    539
    기타
    [Rust 공식문서 한국어 정리] 141. OnceCell
    오뉴노노 2026.06.08 - 15:11
    538
    기타
    [Rust 공식문서 한국어 정리] 140. Atomic
    오뉴노노 2026.06.08 - 15:06
    537
    기타
    [Rust 공식문서 한국어 정리] 139. RwLock
    오뉴노노 2026.06.08 - 14:34 3
    536
    기타
    [Rust 공식문서 한국어 정리] 152. Modules
    오뉴노노 2026.06.08 - 14:00
    535
    기타
    [Rust 공식문서 한국어 정리] 151. Proc Macros
    오뉴노노 2026.06.08 - 14:00
    534
    기타
    [Rust 공식문서 한국어 정리] 150. Attribute Macros
    오뉴노노 2026.06.08 - 14:00 3
    533
    기타
    [Rust 공식문서 한국어 정리] 149. cfg
    오뉴노노 2026.06.08 - 14:00 3
    • 1 2 3 4 5 6 7 8 9 10 .. 12
    • / 12 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay