go 13

[Go] 12. Go(golang)의 메소드(method)

이전 공부에서 golang의 구조체에 대해서 정리를 했었다. 오늘 정리할 내용은 구조체의 메소드에 관한 내용이다. 메소드 객체지향 언어에서 특정 속성들의 기능을 수행하기 위해 만들어진 특별한 함수를 "메소드"라고 한다. Go 언어는 객체지향 언어이지만 필드와 메소드를 묶어서 정의하는 클래스가 없다. Go 언어에서 메소드를 구조체 내부에서 정의하지 않고 구조체 밖에 일반 함수처럼 별도로 선언한다. Go언어의 메소드 Go언어에서 메소드를 선언하는 문법은 일반 함수를 선언하는 문법과 차이가 있다. - 기본 함수 선언 문법 func 함수 이름(매개변수 이름 매개변수형) 반환 형{ ` ` ` - 메소드 선언 문법 func (매개변수이름 구조체 이름) 메소드 이름() 반환형 { ` ` ` 메소드에서도 기본 함수에서..

[Go] 11. Go(golang)의 구조체(struct)

이전 공부에서 golang의 익명 함수에 대해서 정리를 했었다. 오늘 정리할 내용은 구조체에 관한 내용이다. 요즘 준비할 게 많아서 설명은 주석으로 대체하겠다. 구조체 관련 코드 및 설명 package main import "fmt" type student struct { name string age int phone string } type test struct { num int } func callByreference(t *test) { t.num += 10 } func callByvalue(t test) { t.num += 10 } func main() { var stu1 = student{} fmt.Println(stu1) //구조체에 멤버변수가 0으로 초기화되어있지 않기 때문에 "{ 0 }"이 ..

[Go] 10. Go(golang)의 익명 함수(Anonymous function)

이전 공부에서 golang의 함수에 대해서 정리를 했었다. 오늘 정리할 내용은 익명 함수에 관한 내용이다. 파이썬에서 Lambda와 비슷한 맥락이라고 봐도 될 것 같다. Go에서 익명 함수란? 익명 함수는 말 그대로 이름이 없는 함수이다. 함수는 하나의 큰 프로그램을 여러 부분으로 나누고, 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가진다. 그렇다면 익명함수는 어떤 녀석이고 어떻게 호출할까? 익명함수는 그 자리에서 만들고 바로 그 자리에서 실행할 수 있다는 장점이 있다. 사실 익명 함수의 쓰임새는 말로 설명하는 것보다 직접 상황이 돼봐야 이해할 수 있을 것이다. (링크 - 실제로 내가 파이썬에서 익명 함수를 사용했던 경우이다.) Go에서 익명 함수의 형태는 함수의 이름만 ..

[Go] 9. Go(golang)의 함수(func)

오늘 정리할 내용은 함수에 관한 내용이다. 특정 기능들을 기능별로 묶어서 구현하기 위해서 함수를 사용한다. 코드의 야이 줄어들고, 가독성도 좋아지고, 재사용 하기도 편리하다. 함수를 자주 호출하면 그만큼 오버헤드가 생긴다는 단점 말고는 사용하지 않을 이유가 없는 것 같다. Go언어의 함수 기본 문법 package main import "fmt" func func_1() { fmt.Println("매개변수와 반환값이 없는 함수를 실행하였습니다.\n") } func main() { func_1() } 매개변수와 반환 값이 없는 가장 기본적인 함수의 형태이다. 다른 언어들과 마찬가지로 가장 기본 문법에 조금씩 추가하면 반환 값과 매개변수를 갖는 함수를 선언할 수 있다. 여러 가지 변형된 함수를 정리한 코드를 ..

[Go] 8. Go(golang)의 맵(map)

오늘 정리할 내용은 맵(map)에 대한 내용이다. 맵은 슬라이스와 마찬가지로 참조 타입이다. 문법도 슬라이스와 유사하여 쉽게 공부할 수 있었다. Go언어의 맵 기본 문법 Go언어의 맵은 Python언어의 딕셔너리와 매우 유사하다. nil map이라는 개념이 있다는 것이 유일한 차이점인 것 같다. 코드를 통해 nil map을 선언해보고, 선언과 동시에 초기화도 해보자. package main import "fmt" func main() { var dict1 map[string]string if dict1 == nil { fmt.Println("this is nil map") } dict2 := map[string]string{ "name": "주성민", "age": "25", "birth": "950906..

[Go] 7. Go(golang)의 배열과 슬라이스

오늘 정리할 내용은 배열(array)과 슬라이스(slice)이다. 배열에 대한 내용은 타 언어와 매우 유사하여 금방 정리하겠지만, 슬라이스에 대한 내용은 익숙한 개념이 아니기 때문에 추후 수정이 있을 것 같다. C++의 벡터와 유사한 것 같기도 한데.. 일단 정리해보자 Go언어는 "컬렉션"이라는 개념이 존재한다. 두 개 이상의 변수를 모아 놓은 것을 말하는 단어이며, 오늘 정리할 배열과 슬라이스도 "컬렉션"에 포함된다. Go언어의 배열 Go언어의 배열은 C언어의 배열, 즉 Managed Language의 배열과 유사하다. 정적 배열이라고 하는데, 쉽게 말해서 컴파일 과정에서 배열의 크기가 정해져 있어야 한다는 뜻이다. 먼저 가장 기본적인 코드를 실행시켜보자. package main import "fmt"..

[Go] 6. Go(golang)의 조건문과 분기문

조건문 정도는 내용 정리를 생략하려고 했지만, Go언어의 조건문은 다른 언어들에 비해 제약사항이 많은 편이기 때문에 한 번 정리하는 것도 괜찮을 것 같다는 생각이 들었다. Go 언어의 조건문은 불친절한 구문이다. Go언어의 목표 중 "읽기 쉬운 코드"를 실현하기 위해서 라고 생각한다. Go언어의 if o 기본적인 특징 package main import "fmt" func main() { num := 10 if num == 10 { fmt.Println("num 은 10 이군요!") } } 위 코드는 가장 기본적인 Go언어의 조건문 형식이다. 다른 언어와 다른점은 if문의 조건으로 Boolean형이 사용되어야 한다는 것이다. 예를 들면 아래와 같은 코드는 오류가 발생한다. func main() { num..

[Go] 5. Go(golang)의 반복문

반복문과 조건문 만 제대로 익혀도 구구단 정도의 간단한 문제는 간단하게 풀 수 있게 된다. 오늘은 Go언어에서 반복문에는 어떤 특징이 있는지 잘 정리해 보자. Go의 for Go언어 반복문의 특징은 while문이 없다는 점이다. while문의 기능을 for문으로 구현할 수 있기 때문에 반복문은 for문만 기억하면 된다. while문을 자주 사용해서 불편할 것 같지만, 반복문을 사용하기 위해서 한 가지 문법만 기억하면 된다는 점은 마음에 들었다. 아래 코드는 for문의 가장 기본적인 예제를 만들어봤다. package main import "fmt" func main() { var number int fmt.Print("정수 한 개를 입력해 주세요 : ") fmt.Scanf("%d", &number) for..

[Go] 4. Go(golang)의 자료형과 변수 선언

프로그래밍을 위해서 입, 출력만큼 중요한 "변수"라는 개념이 있다. 변수란 입력된 데이터들을 처리하여 결과를 출력하는 과정에서 입력된 데이터들을 저장하거나, 계산 결과를 저장하기 위해 이름이 할당된 메모리 공간이다. 모든 컴퓨터 언어에서는 자료형 마다 할당되는 메모리 공간의 크기가 다르다. 오늘은 Go의 자료형과 변수에 대해서 정리를 해보려고 한다. 변수의 선언 방법 가장 기본적인 자료형인 "int"를 기준으로 정리했다. package main import "fmt" func main() { var num int num = 3 fmt.Printf("현재 num의 값은 %d 입니다.\n", num) } Go의 변수 선언 방법 중 가장 기본적인 방법이다. C언어와 다른점은 사람이 코드를 읽을 때 조금 더 익..

[Go] 3. Go(Golang)의 입력 함수 (scan)

프로그래밍 언어 공부의 두 번째 단계는 입력이다. 적어도 입력, 출력만 할 줄 알아도 "그대로 출력하기"와 같은 알고리즘 문제는 풀 수 있다! (사실 EOF처리를 하는 방법도 배워야 할 것이다!) 앞서 공부했던 "fmt" 패키지에서 제공하는 입력 함수 세 가지에 대해 공부해보자. Scanf 함수 C언어의 scanf 함수와 매우 비슷해서 처음 함수를 사용할 때도 익숙하게 사용할 수 있었다. format 지정자를 통해 정해진 형식의 입력을 받을 수 있게 해주는 함수이다. 간단하게 예제만 보고 넘어가도 괜찮을 것 같다. 예제 코드) package main import "fmt" func main() { var age int var name string fmt.Print("이름과 나이를 띄어쓰기로 구분하여 입력..