• SEARCH

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

      • 오뉴노노
      • 2026.05.30 - 03:18 5

    리플렉션의 법칙 (The Laws of Reflection)
    https://go.dev/blog/laws-of-reflection

    리플렉션(Reflection)은 프로그램이 자신의 구조, 특히 타입을 검사하는 능력입니다. Go의 리플렉션은 강력하지만 혼란스러울 수 있어, 이 글에서는 세 가지 법칙을 통해 명확히 설명합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ① 서론

    Go는 정적 타입 언어입니다. 모든 변수는 컴파일 시점에 알려진 정확히 하나의 타입을 가집니다. 인터페이스는 고정된 메서드 집합을 나타낸다. interface{}(또는 any)는 모든 값을 저장할 수 있습니다.

    ② 핵심 개념

    1. 인터페이스의 표현: 인터페이스 변수는 (값, 타입 기술자) 쌍을 저장합니다.
    2. reflect.Type과 reflect.Value: 리플렉션의 핵심 타입입니다.
    3. Settability(설정 가능성): 리플렉션 객체가 실제 저장소를 수정할 수 있는지 여부입니다.

    ③ 주요 내용 상세

    제1법칙: 인터페이스 값 → 리플렉션 객체
    reflect.TypeOf(x)와 reflect.ValueOf(x)로 인터페이스 값의 타입과 값을 추출합니다.
    - Kind()는 기본 타입을 나타냅니다(int, float64, slice 등).
    - Type()은 정적 타입을 반환합니다.
    - Int(), Float() 등으로 값을 추출합니다.

    주의: ValueOf에 전달된 인자는 복사되므로, 수정하려면 포인터를 전달해야 합니다.

    제2법칙: 리플렉션 객체 → 인터페이스 값
    v.Interface()로 reflect.Value를 다시 interface{}로 복원합니다.
    - ValueOf의 역함수입니다.
    - fmt.Println(v.Interface())처럼 사용하면 구체적인 값을 출력할 수 있습니다.

    제3법칙: 수정하려면 값이 설정 가능해야 함
    v.CanSet()이 true여야 SetFloat, SetInt 등이 동작합니다.
    - reflect.ValueOf(x)는 x의 복사본을 받으므로 설정 불가능합니다.
    - reflect.ValueOf(&x).Elem()처럼 포인터를 전달하고 Elem()으로 간접 참조해야 설정 가능합니다.

    구조체 필드 수정 예시:
    s := reflect.ValueOf(&t).Elem()
    s.Field(0).SetInt(77)
    - &t로 주소를 전달하고 Elem()으로 구조체 값을 얻습니다.
    - exported(대문자) 필드만 설정 가능합니다.

    ④ 실전 활용

    - JSON/XML 마샬링/언마샬링 라이브러리에서 구조체 태그를 읽을 때 사용합니다.
    - ORM에서 데이터베이스 결과를 구조체에 매핑할 때 사용합니다.
    - DI(의존성 주입) 프레임워크에서 타입을 동적으로 생성할 때 사용합니다.
    - 테스트에서 비공개 필드에 접근해야 할 때(권장하지 않음) 사용할 수 있습니다.

    ⑤ 정리

    Go 리플렉션의 세 가지 법칙:
    1. 인터페이스 값에서 리플렉션 객체로 간다.
    2. 리플렉션 객체에서 인터페이스 값으로 돌아간다.
    3. 수정하려면 값이 설정 가능해야 한다.

    이 법칙들을 이해하면 리플렉션이 훨씬 쉬워집니다. 리플렉션은 강력한 도구이지만 꼭 필요할 때만 신중하게 사용하세요.

    #Go #Golang #Reflection #리플렉션 #Interface #인터페이스 #메타프로그래밍 #공식문서

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

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] 184. PartialOrd 48 2026 06.08 [Rust 공식문서 한국어 정리] 183. Ord 42 2026 06.08 [Rust 공식문서 한국어 정리] 182. Eq 27 2026 06.08 [Rust 공식문서 한국어 정리] 181. PartialEq 33 2026 06.08 [Rust 공식문서 한국어 정리] 180. TryFrom 22 2026 06.08

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Rust 공식문서 한국어 정리] 166. str
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 490
    기본 (489) 제목 날짜 수정 조회 댓글 추천 비추
    기타 정렬 검색
    • 포인트 획득 공지
      5
      2026.04.24 - 19:48 6388 5
    • 링크 업로드 관련 공지
      10
      2026.03.25 - 21:56 5752 10
    • 인증메일 공지
      3
      2026.03.15 - 16:42 5681 3
    • 파일링크 및 인증메일 발송 관련 문의 안내
      9
      2026.03.14 - 22:03 6558 9
    • 포인트 게시판 안내
      2026.02.28 - 19:14 7158
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 8861 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 860
    489
    기타
    [Rust 공식문서 한국어 정리] 184. PartialOrd
    오뉴노노 2026.06.08 - 15:42 48
    488
    기타
    [Rust 공식문서 한국어 정리] 183. Ord
    오뉴노노 2026.06.08 - 15:42 42
    487
    기타
    [Rust 공식문서 한국어 정리] 182. Eq
    오뉴노노 2026.06.08 - 15:42 27
    486
    기타
    [Rust 공식문서 한국어 정리] 181. PartialEq
    오뉴노노 2026.06.08 - 15:42 33
    485
    기타
    [Rust 공식문서 한국어 정리] 180. TryFrom
    오뉴노노 2026.06.08 - 15:42 22
    484
    기타
    [Rust 공식문서 한국어 정리] 179. TryInto
    오뉴노노 2026.06.08 - 15:42 16
    483
    기타
    [Rust 공식문서 한국어 정리] 178. From
    오뉴노노 2026.06.08 - 15:39 20
    482
    기타
    [Rust 공식문서 한국어 정리] 177. Into
    오뉴노노 2026.06.08 - 15:39 15
    481
    기타
    [Rust 공식문서 한국어 정리] 176. AsRef
    오뉴노노 2026.06.08 - 15:39 12
    480
    기타
    [Rust 공식문서 한국어 정리] 175. Deref
    오뉴노노 2026.06.08 - 15:39 9
    479
    기타
    [Rust 공식문서 한국어 정리] 174. Default
    오뉴노노 2026.06.08 - 15:39 10
    478
    기타
    [Rust 공식문서 한국어 정리] 173. Clone
    오뉴노노 2026.06.08 - 15:38 9
    477
    기타
    [Rust 공식문서 한국어 정리] 172. Copy
    오뉴노노 2026.06.08 - 15:38 9
    476
    기타
    [Rust 공식문서 한국어 정리] 171. Drop
    오뉴노노 2026.06.08 - 15:38 5
    475
    기타
    [Rust 공식문서 한국어 정리] 170. Weak
    오뉴노노 2026.06.08 - 15:37 15
    474
    기타
    [Rust 공식문서 한국어 정리] 169. Arc
    오뉴노노 2026.06.08 - 15:37 4
    473
    기타
    [Rust 공식문서 한국어 정리] 168. Rc
    오뉴노노 2026.06.08 - 15:37 12
    472
    기타
    [Rust 공식문서 한국어 정리] 167. Box
    오뉴노노 2026.06.08 - 15:36 6
    471
    기타
    [Rust 공식문서 한국어 정리] 166. str
    오뉴노노 2026.06.08 - 15:36 7
    470
    기타
    [Rust 공식문서 한국어 정리] 165. String
    오뉴노노 2026.06.08 - 15:36 5
    • 1 2 3 4 5 6 7 8 9 10 .. 25
    • / 25 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay