본문 바로가기
  • GDG on campus Ewha Tech Blog
3-1기 스터디/Golang

[4주차] Go 언어의 배열, 구조체, 포인터

by 선달 2021. 11. 22.


Chapter 12. Array (배열)

 

배열이란?

: 같은 타입의 데이터들로 이루어진 타입

  • 요소 (elements) : 배열을 이루는 각 값
  • 인덱스 (index) : 요소를 가리키는 위치값

 

배열 변수 선언하기

1. 할당만 하고 초기화를 하지 않는 경우

var v[5] int
//[0,0,0,0,0]

 

2. 할당하고 초기화까지 한 경우

v := [...]int{1,2,3}
//[1,2,3]

 

3. 할당하고 초기화는 일부만 하는경우

v := [5] int {1,2,3}
//[1,2,3,0,0]

var s = [5] int{1:10, 3:30}
//[10,0,0,30,0]

 

배열의 선언은 항상 상수로 해야한다!

Range 순회

해당 배열을 처음부터 끝까지 도는 반복문을 간단하게 나타낼 수 있다!

 

배열은 연속된 메모리

요소 위치 = 배열 시작 주소 + (인덱스 * 타입크기)

컴퓨터는 인덱스의 타입 크기를 사용하여 메모리 주소를 찾는다.

 

배열 복사하기

 

배열의 크기

배열 크기 = 타입 크기 * 항목 개수

len(변수) : 변수에 해당하는 배열의 크기값을 반환한다

 


Chapter13. Structure ( 구조체 )

 

구조체란?

: 배열과 달리 다른 타입의 값들을 변수 하나로 묶어주는 기능

 

구조체 초기화

  • 초깃값 생략하기
var house House

 

  • 필드 초기화하기
var house House = House{"서울시 강동구", 28, 9.80, "아파트"}

 

  • 일부 필드 초기화하기
var house House = House{Size : 28, Type: "아파트"}

 

구조체를 포함하는 구조체

 

1. 내장 타입처럼 포함하는 방식

2. 포함된 필드 방식

 


Chapter 14. Pointer (포인터)

 

포인터

: 메모리 주소를 값으로 갖는 타입

var a int = 500
var p *int

p = &a

 

nil

: 포인터 변수값을 초기화하지 않았을 떄의 기본값

  • 값은 0으로 나온다
  • 하지만 정확한 의미는 : 유효하지 않은 메모리 주솟값
  • 즉, 어떤 메모리 공간도 가리키고 있지 않다

 

포인터를 쓰는 이유

1. 변수를 대입하거나 함수인자를 전달할때는 값을 복사한다 -> 많은 메모리 공간을 사용하게 된다

2. 큰 메모리 공간을 복사할대는 성능문제가 발생하게 된다

3. 다른공간으로 복사할경우 변경사항이 적용되지 않는다

 

인스턴스

: 메모리에 있는 데이터 실체 = 할당된 메모리 공간의 실체

var data Data

 

인스턴스를 별도로 생성하지 않고 곧바로 인스턴스를 생성해서 초깃값으로 대입한 경우

var p *Data = &Data{}
var p = new (Data)

 

댓글