Search

[Go 기초] [#5] 기본 연산자

요약
기본적인 연산자와 사용법
썸네일
https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1566913552/noticon/xjarxsfmmcouhih40val.png
작성일자
2024/04/05 10:38
수정일자
2024/05/03 12:29
스택
Go
카테고리
기초
태그
연산자

기본 연산자

Go 언어는 다른 언어들과 마찬가지로 각종 계산을 위한 다양한 연산자를 지원하고 있습니다.
오늘은 그 연산자들의 종류와 사용방법에 대해서 알아보겠습니다.
예제에 사용된 코드들은 모두 참조란의 깃허브 링크에서도 확인하실 수 있습니다.

산술 연산자 (Arithmetic operator)

산술 연산자는 사칙 연산자와 증감 연산자를 나타냅니다.
package main import "fmt" func main() { var a int // 더하기 연 a = 1 + 1 fmt.Println(a) // 2 // 빼기 연산 a = 2 - 1 fmt.Println(a) // 1 // 곱하기 연산자 a = 3 * 1 fmt.Println(a) // 3 // 나누기 연산자 a = 4 / 2 fmt.Println(a) // 2 // 나머지 연산자 a = 1 % 4 fmt.Println(a) // 1 // 증감 연산자 // 1 증가 b := 5 b++ fmt.Println(b) // 6 // 1 감소 c := 5 c-- fmt.Println(c) // 4 }
Go
복사
주의해야할 점은 Go 언어의 증감 연산자는 다른 언어들과는 다르게 몇가지 제약 사항이 있습니다. 이는 개발 언어를 사용함에 있어서 발생할 수 있는 모호함을 제거하기 위해서 입니다.
아래의 소스코드는 컴파일 오류가 발생하는 증감 연산자의 잘못된 사용 방법에 대한 예제입니다.
package main func main() { var a int i = 1 // Go 언어의 증감 연산자는 값을 반환을 하지 않습니다. // 따라서 이 다음 라인의 코드는 컴파일 에러를 발생시킵니다. sum := i++ // Go 언어의 증감 연산자는 전치 연산을 허용하지 않습니다. // 따라서 이 다음의 라인의 코드도 컴파일 에러를 발생시킵니다. ++i }
Go
복사

비교 연산자 (Comparison operator)

관계 연산자는 변수간의 크기를 비교하거나 동일한지 여부를 확인하는데 사용합니다.
관계 연산자의 결과값은 모두 bool 타입 입니다. 이게 무슨 데이터 타입인지 모르겠다면 치트시트 링크를 참고해주세요.
package main import "fmt" func main() { var a, b int var c bool a = 1 b = 2 // a, b 값이 같으면 true 아니면 false c = a == b fmt.Println(c) // false // a 값이 더 크면 true 아니면 false c = a > b fmt.Println(c) // false // a 값이 더 크거나 b 와 같다면 true 아니면 false c = a >= b fmt.Println(c) // false // a 값이 더 작으면 true 아니면 false c = a < b fmt.Println(c) // true // a 값이 더 작거나 b 와 같다면 true 아니면 false c = a <= b fmt.Println(c) // true // a, b 값이 다르면 true 아니면 false c = a != b fmt.Println(c) // true }
Go
복사

논리 연산자 (Logical operator)

논리 연산자는 AND, OR, NOT 등의 논리적인 관계를 표현하는데 사용합니다.
package main import "fmt" func main() { var a, b, c bool a = true b = false // OR 연산자 // a, b 둘 중 하나라도 true 값이면 true // 모두 false 값이면 false c = a || b fmt.Println(c) // true // AND 연산자 // a, b 둘 중 하나라도 false 값이면 false // 모두 true 값이면 true c = a && b fmt.Println(c) // false // NOT 연산자 // a 가 true 값이면 false // a 가 false 값이면 true c = !a fmt.Println(c) // false }
Go
복사

비트 연산자 (Bitwise operator)

비트 연산자는 산술 연산자의 일종으로 비트 단위 연산을 위한 연산자입니다.
package main import "fmt" func main() { var a, b, c int // ...(상위 비트 표기 생략) a = 1 // ... 0001 b = 2 // ... 0010 // OR 게이트 // a, b 각각의 비트를 비교하여 하나라도 1이면 1로 설정 c = a | b fmt.Printf("%04b\n", c) // ... 0011 = 3 // AND 게이트 // a, b 각각의 비트를 비교하여 하나라도 0이면 0으로 설정 c = a & b fmt.Printf("%04b\n", c) // ... 0000 = 0 // Left Shift // a 비트 전체를 N번 왼쪽으로 이동 c = a << 2 fmt.Printf("%04b\n", c) // ... 0100 = 4 // Right Shift // b 비트 전체를 N번 오른쪽으로 이동 c = b >> 1 fmt.Printf("%04b\n", c) // ... 0001 = 0 }
Go
복사

할당 연산자 (Assignment operator)

할당 연산자는 값을 할당하는 = 외에 사칙 연산, 비트 연산을 축약한 연산자입니다.
package main import "fmt" func main() { var a, b int a = 1 b = 2 // b = b + a b += a fmt.Println(b) // 3 // b = b - a b -= a fmt.Println(b) // 2 // b = b * a b *= a fmt.Println(b) // 2 // b = b >> a b >>= a fmt.Println(b) // 1 // b = b | a b |= a fmt.Println(b) // 1 // b = b & a b &= a fmt.Println(b) // 1 }
Go
복사

주소 연산자 (Address operator)

주소 연산자는 C/C++ 에서 사용하는 포인터와 같이 변수의 주소를 얻어내거나 그 주소가 가르키는 변수의 값을 표현할 때 사용합니다.
단, Go 에서의 주소 연산은 포인터 산술 기능을 포함하고 있지 않습니다.
package main import "fmt" func main() { var a int a = 1 // 포인터는 변수의 데이터 타입 앞에 * 을 붙혀서 선언합니다. var b *int // & 연산자를 이용하여 포인터 변수에 a 변수의 주소값을 할당합니다. b = &a // * 연산자를 이용하여 포인터 변수가 가르키는 변수 공간을 참조할 수 있습니다. *b = *b + 1 fmt.Printf("pointing variable b : %d\n", *b) fmt.Printf("orginal variable a : %d\n", a) // Go 에서 포인터 산술 기능은 허용되지 않습니다. // 따라서 아래의 코드는 컴파일 에러를 발생시킵니다. b = b + 1 }
Go
복사

수신 연산자 (Receive operator)

이 밖에도 Go 언어에는 수신 연산자라고 불리는 연산자가 존재합니다.
수신 연산자에 대한 내용은 현재는 이해하기 어렵기 때문에 추후에 채널에 대한 내용을 소개할 때 같이 다루도록 하겠습니다.

끝마치며

이번 시간에는 Go 언어에서 사용할 수 있는 연산자에 대해서 알아봤습니다.
다음 강의에서는 Go 에서 분기 처리를 위한 제어문의 사용방법에 대해서 알아보겠습니다.
감사합니다. 다음 강의에서 만나요!
강의 목록

참조