golang 스터디 2주차(함수 / 상수 / if문)

2023-11-26
5min
Golang

Chapter 07. 함수


7.1 함수 정의

go
func Add(a int, b int) int { return a + b }
go
func Add(a int, b int) int { return a + b }
  1. func: 함수 정의 키워드
  2. Add: 함수명
    • 함수명의 명명 규칙은 변수명과 같다.
    • 첫 글자가 대문자인 함수는 패키지 외부로 공개 되는 함수다.
  3. (a int, b int): 매개변수
  4. int: 반환 타입
INFO

함수를 호출할 때 입력하는 값을 arguments 라고 한다. 호출부에서는 arguments

반면 함수가 외부로부터 입력받는 변수는 parameter라고 한다. 선언부에서는 parameter

Golang 에서 함수는 값을 여러 개 반환할 수 있다. 반환값이 여럿일 때는 반환 타입들을 소괄호로 묶어서 표현한다.

go
package main import ( "fmt" ) // NOTE: 여러개의 반환값이 있을 때는 아래처럼 () 로 묶어야한다. func Divide(a, b int) (int, bool) { if b == 0 { return 0, false } return a / b, true } func main() { d, success := Divide(10, 2) fmt.Println(d, success) c, success := Divide(10, 0) fmt.Println(c, success) }
go
package main import ( "fmt" ) // NOTE: 여러개의 반환값이 있을 때는 아래처럼 () 로 묶어야한다. func Divide(a, b int) (int, bool) { if b == 0 { return 0, false } return a / b, true } func main() { d, success := Divide(10, 2) fmt.Println(d, success) c, success := Divide(10, 0) fmt.Println(c, success) }

또한, 함수 선언부에서 반환 타입을 적을 때 변수명까지 지정해주면, Return 문으로 해당 변수를 명시적 반환을 하지 않음에도 반환이 가능하다.

go
package main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } ...
go
package main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } ...

Chapter 08. 상수

상수는 변하지 않는 값을 의미한다. 상수는 초기화 된 값이 변하지 않는다. 정수, 실수, 문자열 등 기본 타입값들만 상수로 선언 될 수 있다. 구조체, 배열 등 기본타입이 아닌 complex 타입에는 상수를 사용할 수 없다.

상수로 사용될 수 있는 타입

  • 불리언
  • 정수
  • 복소수
  • 실수
  • 문자열

go
const ConstValue int = 10
go
const ConstValue int = 10
  • const: 상수 선언 키워드
  • ConstValue: 상수명
  • int: 타입
go
func main() { const C int = 20 fmt.Println(&C) // 에러 발생 }
go
func main() { const C int = 20 fmt.Println(&C) // 에러 발생 }

&로 C 상수의 주소를 찍으면 에러가 발생한다. 왜? 상수는 값으로만 동작한다.

변수에 대해 이야기할 때 변수는 값, 이름 타입, 메모리 주소 4가지 속성을 갖는다고 이야기 했는데, 상수는 값, 이름, 타입 3가지 속성만 갖는다.

8.2.3 iota 로 간편하게 열거값 사용하기

상수는 코드값 그 자체로만 사용하는 경우가 많기 때문에 iota 키워드를 이용하면 편함. 값은 다른 상수와 구별이 되기만하고 키워드가 중요하다는 의미.

아래처럼 사용하면 된다.

iota 의 시작값은 0 이라는 것만 알면 된다.

go
const ( Red int = iota // 0 Blue int = iota // 1 Green int = iota // 2 ) // 간소화해서 표현하면 const ( Red int = iota Blue Green )
go
const ( Red int = iota // 0 Blue int = iota // 1 Green int = iota // 2 ) // 간소화해서 표현하면 const ( Red int = iota Blue Green )

상수는 선언 시 타입을 명시하지 않을 수도 있음. 그러면 타입없는 상수가 된다.

타입없는 상수는 변수에 복사될 때 타입이 정해지기 때문에 여러 타입에 사용되는 상숫값을 사용할 때 편하다.

Chatper 09. if문

if 문은 아래처럼 사용할 수 있다. 조건문 영역에 소괄호() 를 사용하지 않아도 된다. 그러나 복잡한 조건인 경우에는 사용하는게 좋을듯

go
if 조건문 { 문장 } else if 조건문 { 문장 } else { 문장 }
go
if 조건문 { 문장 } else if 조건문 { 문장 } else { 문장 }

재밌는점. if 문 조건을 검사하기 전에 초기문을 넣을 수 있다.

go
package main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } func intPtr(x int) *int { return &x } func main() { if a, b := Divide(10, 5); b { fmt.Println(a) } if a, b := Divide(10, 0); b { fmt.Println(a) } else { fmt.Println() } }
go
package main import ( "fmt" ) func Divide(a, b int) (result int, success bool) { if b == 0 { result = 0 success = false return } result = a / b success = true return } func intPtr(x int) *int { return &x } func main() { if a, b := Divide(10, 5); b { fmt.Println(a) } if a, b := Divide(10, 0); b { fmt.Println(a) } else { fmt.Println() } }

파란색으로 하이라이트한 부분이 초기문, 핑크색이 조건문


Chapter 10. switch 문

딱히 쓸 일이 없을거같기에, 정리하지 않는다.