728x90

go 24

[Go] 기초 - 인터페이스

1. Go 인터페이스 - 구조체(struct)가 필드들의 집합체라면, interface는 메서드들의 집합체 - interface는 타입(type)이 구현해야 하는 메서드 원형(prototype)들을 정의 - 하나의 사용자 정의 타입이 interface를 구현하기 위해서는 단순히 그 인터페이스가 갖는 모든 메서드들을 구현하면 된다. - 인터페이스는 struct와 마찬가지로 type 문을 사용하여 정의 type Shape interface { area() float64 perimeter() float64 } 2. 인터페이스 구현 - 인터페이스를 구현하기 위해서는 해당 타입이 그 인터페이스의 메서드들을 모두 구현하면 되므로, 위의 Shape 인터페이스를 구현하기 위해서는 area(), perimeter() 2..

개발/Go 2022.07.30

[Go] 기초 - 메소드

1. Go 메소드(Method) - 메소드는 특별한 형태의 func 함수 - 메소드는 함수 정의에서 func 키워드와 함수명 사이에 "그 함수가 어떤 struct를 위한 메소드인지"를 표시한다. - receiver부분에 메소드가 속한 struct 타입과 struct 변수명을 지정한다.(struct 변수명은 함수 내에서 마치 입력 파라미터처럼 사용된다.) package main //Rect - struct 정의 type Rect struct { width, height int } //Rect의 area() 메소드 func (r Rect) area() int { return r.width * r.height } func main() { rect := Rect{10, 20} area := rect.area()..

개발/Go 2022.07.27

[Go] 기초 - 구조체(Struct)

1. Struct (구조체) - Go에서 struct는 Custom Data Type을 표현하는데 사용되는데, Go의 struct는 필드들의 집합체다. - Go에서 struct는 필드 데이터만을 가지며, (행위를 표현하는) 메서드를 갖지 않는다. - Go 언어는 객체지향 프로그래밍(Object Oriented Programming, OOP)을 고유의 방식으로 지원한다. 즉, Go에는 전통적인 OOP 언어가 가지는 클래스, 객체, 상속 개념이 없다. 전통적인 OOP의 클래스(class)는 Go 언어에서 Custom 타입을 정의하는 struct로 표현되는데, 전통적인 OOP의 클래스가 필드와 메서드를 함께 갖는 것(Java)과 달리 Go 언어의 struct는 필드만을 가지며, 메서드는 별도로 분리하여 정의한..

개발/Go 2022.07.27

[Go] 기초 - 컬렉션 (Map)

1. Map 개요 - Map은 키(Key)에 대응하는 값(Value)을 신속히 찾는 해시테이블(Hash table)을 구현한 자료구조이다 var newMap map[int]string newMap = make(map[int]string) //리터럴을 사용한 초기화 exMap := map[string]string{ "a": "apple", "b": "banana", "c": "coconut", } - Map을 사용하려면 make함수로 초기화를 꼭 해주어야 한다. - 바로 초기화도 가능하지만 나는 개발할 때 항상 make함수로 초기화를 한 후에 사용했다. 2. Map 사용 - 데이터를 추가하기 위해서는 "map변수[키] = 값" 처럼 해당 키에 그 값을 할당 - 키가 중복일 경우 마지막에 할당한 값이 기존에..

개발/Go 2022.07.22

[Go] 기초 - 컬렉션 (Slice)

1. 슬라이스 - 배열과 다르게 크기를 동적으로 변동이 가능하다. - Go Slice 선언은 배열을 선언하듯이 "var v []T" 처럼 하는데 배열과 달리 크기는 지정하지 않는다. 예를 들어, 정수형 Slice 변수 a를 선언하기 위해서 "var a []int" 처럼 선언할 수 있다. - make 함수를 통해서 선언이 가능하다. - make() 함수의 첫번째 파라미터에 생성할 슬라이스 타입을 지정하고, 두번째는 Length (슬라이스의 길이), 그리고 세번째는 Capacity (내부 배열의 최대 길이)를 지정하면, 모든 요소가 Zero value인 슬라이스를 만들게 된다. 여기서 만약 세번째 Capacity 파라미터를 생략하면 Capacity는 Length와 같은 값을 갖는다. 그리고 슬라이스의 길이 ..

개발/Go 2022.07.21

[Go] 기초 - 컬렉션 (배열)

1. 배열 - 배열은 연속적인 메모리 공간에 동일한 타입의 데이타를 순서적으로 저장하는 자료구조 - Go에서 배열의 첫번째 요소는 0번, 그 다음은 1번, 2번 등으로 인덱스를 매긴다 (Zero based array). - 배열의 선언은 "var 변수명 [배열크기] 데이타타입" 과 같이 하는데, 배열크기를 데이타타입 앞에 써 주는 것이 C, Java 같은 다른 언어들과 다르다. Go에서 배열의 배열크기는 Type을 구성하는 한 요소이다. 즉, [3]int와 [5]int는 서로 다른 타입으로 인식된다. 배열이 선언된 후에 각 배열의 요소를 인덱스를 사용하여 읽거나 쓸 수 있다. package main func main() { var a [3]int //정수형 3개 요소를 갖는 배열 a 선언 a[0] = 1..

개발/Go 2022.07.20

[Go] 기초 - 클로저 (Closure)

1. 클로저 - Go 언어에서 함수는 Closure로서 사용될 수도 있다. - Closure는 함수 바깥에 있는 변수를 참조하는 함수값(function value)을 말한다. 이 때 함수는 바깥의 변수를 마치 함수 안으로 끌어들인 듯이 그 변수를 읽거나 쓸 수 있게 된다. package main func nextValue() func() int { i := 0 return func() int { i++ return i } } func main() { next := nextValue() println(next()) // 1 println(next()) // 2 println(next()) // 3 anotherNext := nextValue() println(anotherNext()) // 1 다시 시작 ..

개발/Go 2022.07.19

[Go] 기초 - 익명함수

1. 익명함수 - 함수명을 갖지 않는 함수 - 일반적으로 익명함수는 그 함수 전체를 변수에 할당하거나 다른 함수의 파라미터에 직접 정의되어 사용 func main() { sum := func(n ...int) int { //익명함수 정의 s := 0 for _, i := range n { s += i } return s } result := sum(1, 2, 3, 4, 5) //익명함수 호출 println(result) } - Go로 개발하면서 익명함수는 거의 사용을 안했던 것 같다. 2. 일급함수 - Go 프로그래밍 언어에서 함수는 일급함수로서 Go의 기본 타입과 동일하게 취급되며, 따라서 다른 함수의 파라미터로 전달하거나 다른 함수의 리턴값으로도 사용될 수 있다. 즉, 함수의 입력 파라미터나 리턴 파..

개발/Go 2022.07.18

[Go] 기초 - 함수

1. 함수 - Go에서 함수는 func 키워드와 함수명을 사용해서 정의한다. - Java의 메소드와 비슷하다. - 함수명 뒤에 괄호 안에 받을 파라미터를 적는데, 파라미터명 + 타입 순서로 적어준다. func main() { msg := "Hello" say(msg) } func say(msg string) { println(msg) } - msg에 "Hello"를 담아 say함수에 전달했고, say함수에서 msg(string)로 받아서 출력했다. 2. 파라미터 전달 방식 - Go에서 파라미터를 전달하는 방식은 Pass By Value와 Pass By Reference로 나뉜다. (1) Pass By Value 위의 [1. 함수]의 예제에서는 msg의 값 "Hello" 문자열이 복사되어 함수 say()에..

개발/Go 2022.07.17

[Go] 기초 - 반복문

1. for - Go는 반복문에서도 괄호는 쓰지 않는다. - while 반복문이 없다. func main() { sum := 0 for i := 1; i 90 { // break //} } println(n) } - 무한 루프는 조건을 다 없애고 for만 써준다. func main() { for { println("Infinite loop") } } 2. for range - for range 문은 for "인덱스,요소값 := range 컬렉션" 컬렉션에서 2개의 변수를 가져온다. - 변수를 사용 안할 경우 _로 처리한다. names := []string{"기억", "니은", "디귿"} for index, name := range names { println(index, name) // 0, 기억 // ..

개발/Go 2022.07.17
728x90