728x90

개발/Go 25

[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] 기초 - 패키지

1. Go 패키지 - Go는 패키지(Package)를 통해 코드의 모듈화, 코드의 재사용 기능을 제공한다. - Go는 패키지를 사용해서 작은 단위의 컴포넌트를 작성하고, 이러한 작은 패키지들을 활용해서 프로그램을 작성할 것을 권장한다. - Go는 실제 프로그램 개발에 필요한 많은 패키지들을 표준 라이브러리로 제공한다. 이러한 표준 라이브러리 패키지들은 GOROOT/pkg 안에 존재한다. GOROOT 환경변수는 Go 설치 디렉토리를 가리키는데, 보통 Go 설치시 자동으로 추가된다. 즉, 윈도우즈에서 Go를 설치했을 경우 디폴트로 C:\go 에 설치되며, GOROOT는 C:\go를 가리킨다. 2. Main 패키지 - 일반적으로 패키지는 라이브러리로서 사용되지만, "main" 이라고 명명된 패키지는 Go Co..

개발/Go 2022.07.25

[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
728x90