language 29

Go 'BANK & DICTIONARY PROJECTS' : Update Delete (in map)

이번에는 map 에 저장된 값을 수정하고 삭제하는 실습을 한다. 먼저 'part2_myDict_main.go' 파일을 먼저 작성하고, 'myDict.go' 파일을 작성하는 순서로 진행한다. 이건 마치 TDD 를 하는 느낌이다. package main import ( "fmt" "myDict" ) func main() { dictionary := myDict.Dictionary{} baseWord := "hello" // 값을 추가 dictionary.Add(baseWord, "First") // 저장된 값을 수정 err := dictionary.Update(baseWord, "Second") if err != nil { fmt.Println(err) } // 저장된 값을 조회 한 다음 출력 word, _..

Archive/Go 2021.05.21

Go 'BANK & DICTIONARY PROJECTS' : Add Method (in map)

이번에는 map 에 요소를 추가하는 실습을 한다. 앞서 작성한 myDict.go 파일에 다음 내용을 추가 한다. var errWordExists = errors.New("That word already exists") // Add a word to the dictionary func (d Dictionary) Add(word, def string) error { // [if style] _, err := d.Search(word) if err == errNotFound { d[word] = def } else if err == nil { return errWordExists } return nil // [switch style] /* _, err := d.Search(word) switch err { c..

Archive/Go 2021.05.21

Go 'BANK & DICTIONARY PROJECTS' : Dictionary part One

이번 실습에서는 struct 를 사용하지 않고 'type' 이라는 것을 사용 한다. 그 전에 먼저 myDict 디렉토리를 만들고 그 안에 myDict.go 파일을 생성한다. 그리고 이 파일을 사용 할 main 이 될 파일을 'part2_myDict_main.go' 라는 이름으로 생성했다. (앞서 예제에서 사용했던 'main.go' 파일도 'part2_account_main.go' 로 이름을 수정했다.) 다음은 map 을 정의한 myDict.go 파일의 코드이다. package myDict import "errors" type Dictionary map[string]string var errNotFound = errors.New("Not Found") // Search for a word func (d D..

Archive/Go 2021.05.21

Go 'BANK & DICTIONARY PROJECTS' : Finishing Up

Go 에는 다른 언어와 유사하게 사용자가 실행하지 않아도 자동으로 실행해주는 메소드가 있다. 예를 들면 Python 에서 class 를 출력하면 class 의 __str__ 을 호출 한다거나 Java 에서 객체를 출력하면 toString() 을 호출 하는 것과 같다. 본격적으로 알아보기에 앞서 account struct 의 owner 값을 수정하고 가져올 수 있는 메소드를 만들었다. // ChangeOwner of the account func (a *account) ChangeOwner(newOwner string) { a.owner = newOwner } // Owner of the account func (a account) Owner() string { return a.owner } Go 에서 s..

Archive/Go 2021.05.21

Go 'BANK & DICTIONARY PROJECTS' : Methods part Two

지난번 Methods part One 에서 Deposit method 를 호출했을 때 account 값이 수정되지 않은 것을 확인했다. 그 이유는 Go 에서 function, method 를 사용할 때 object, struct 등에 대해 복사본을 사용하기 때문이다. 지금의 경우 Deposit 메소드의 receiver 에서 복사본이 사용 됐다. // Deposit + amount on your account func (a account) Deposit(amount int) { a.balance += amount } 여기서 사본을 사용하지 않고 원본을 사용하게 하기 위해서는 다음과 같이 * 연산자를 사용해야 한다. // Deposit + amount on your account func (a *accoun..

Archive/Go 2021.05.21

Go 'BANK & DICTIONARY PROJECTS' : Methods part One

Go 에는 function 이외에 method 개념이 있다. 지금까지 알아낸 내용을 기준으로 method 는 struct 와 연관이 있다. 마치 java 에서 멤버 필드의 값을 조작하기 위해 method 를 추가 하는 것처럼, struct 의 값을 조작하기 위해 function 을 정의 하는데, 이 때 사용하는 function 을 method 라고 하는것 같다. 형태는 function 과 매우 유사하다. 이전에 작성했던 account.go 파일을 다음과 같이 수정하여 account struct 의 balance 값을 조작하는 method 를 정의 해보자. package accounts type account struct { owner string balance int } // NewAccount crea..

Archive/Go 2021.05.19

Go 'BANK & DICTIONARY PROJECTS' : Account + NewAccount

Go 의 struct 를 공부할 겸 간단한 bank account 를 생성하는 예제를 만들어 본다. 우선 accounts 폴더를 만들고 그 아래 accounts.go 파일을 만든다. accounts.go 는 실행의 주체로 사용하지 않을 것이기 때문에 main function 을 만들지 않는다. 사용 할 struct 를 정의하는데, 이름과 잔액 정보를 가지고 있도록 다음과 같이 만든다. package accounts type Account struct { Owner string Balance int } 이 파일에서 주목할 점은 struct 인 Account 와 그 안에 선언한 Owner, Balanace 가 영문자 대문자로 시작한다는 점이다. 이렇게 작성하면 struct 를 export 하겠다는 의미이고,..

Archive/Go 2021.05.19

Go 의 Struct 기본 사용법

Struct 는 Object 와 유사 하면서 map 보다 조금 더 유연하다. C에서 봤던 구조체와 비슷한 느낌을 가지고 있는것 같다. package main import "fmt" // Go 의 struct 에는 constructor (생성자) 가 없다. // 우리가 constructor 를 직접 실행해 줘야 한다. -> 생성자가 없다고 했는데 실행해줘야 한다는 말을 이해하지 못함. type person struct { name string age int favFood []string } func main() { myFood := []string{"kimchi", "ramen"} // struct 사용 방법 1, 순서대로 타입에 맞게 값을 입력 (권장하지 않음) nimkoes_ver1 := person{..

Archive/Go 2021.05.17

Go 의 Map 기본 사용법

기본적으로 map 은 key 와 value 로 이루어져 있다. 다음은 map 을 사용하는 단순한 예제이다. package main import "fmt" func main() { sample_map := map[string]string{"key": "value", "name": "nimkoes"} sample_map["add_key"] = "add_value" // 새로운 값을 추가 sample_map["key"] = "modify_value" // 기존의 값을 수정 (덮어쓰기) // range 를 사용 한 반복 for key, value := range sample_map { fmt.Println(key, value) } fmt.Println() // value 만 사용하고 싶을 때 for _, v :..

Archive/Go 2021.05.17

Go 의 Array 와 Slice 선언과 기본 사용법

Go 에는 일반적으로 생각하는 배열을 표현하는 두 가지 방법이 있다. 하나는 다른 언어에서 보던 것과 같은 배열이고, 다른 하나는 슬라이스(slice) 라고 하는게 있다. 기본적인 선언 방법은 다음과 같다. package main import "fmt" func main() { // array 사용 방법 1 example_array_ver1 := [5]string{"arr_nimkoes", "arr_go", "arr_java"} // array 사용 방법 2 example_array_ver2 := [...]string{"kim", "lee", "park", "choi"} // slice 사용 방법 example_slice := []string{"nimkoes", "go", "java"} example_s..

Archive/Go 2021.05.17