소개
프로그래밍 언어에서 데이터를 변수에 저장한 후, 어떻게 처리해야 할까요?
이때 저장된 데이터에 대한 계산을 수행하기 위해 연산자 (operators) 가 필요합니다. 이 섹션에서는 다음을 배우게 됩니다.
지식 포인트:
- 산술 연산자 (Arithmetic Operators)
- 관계 연산자 (Relational Operators)
- 논리 연산자 (Logical Operators)
- 할당 연산자 (Assignment Operators)
프로그래밍 언어에서 데이터를 변수에 저장한 후, 어떻게 처리해야 할까요?
이때 저장된 데이터에 대한 계산을 수행하기 위해 연산자 (operators) 가 필요합니다. 이 섹션에서는 다음을 배우게 됩니다.
지식 포인트:
산술 연산자는 가장 기본적인 연산자로, 기본적인 계산 방법을 나타냅니다.
연산자 | 기능 |
---|---|
+ |
덧셈 (Addition) |
- |
뺄셈 (Subtraction) |
* |
곱셈 (Multiplication) |
/ |
나눗셈 (Division) |
% |
나머지 (Modulus, Remainder) |
home/project/
디렉토리에서 opePractice.go
라는 파일을 생성합니다.
cd ~/project
touch opePractice.go
다음 코드를 작성합니다.
package main
import "fmt"
func main() {
a := 10
b := 3
fmt.Println("a =", a, "b =", b)
fmt.Println("-----")
// 덧셈, 뺄셈, 곱셈
fmt.Println("a + b =", a+b)
fmt.Println("a - b =", a-b)
fmt.Println("b - a =", b-a)
fmt.Println("a * b =", a*b)
// 나눗셈
// Go 에서는 정수를 나누면 소수점 아래가 버려집니다.
fmt.Println("a / b =", a/b)
// 하지만 부동 소수점 숫자를 나누면 이러한 문제가 없습니다.
fmt.Println("10.0 / 3 =", 10.0/3)
// 나머지 계산: 일반적인 형태
fmt.Println("a % b =", a%b)
// 음수 나머지 계산
// 계산 방법: 나머지 = 피제수 - (피제수 / 제수) * 제수
fmt.Println("10 % -3 =", 10%-3)
fmt.Println("-10 % 3 =", -10%3)
fmt.Println("-10 % -3 =", -10%-3)
}
코드를 실행하고, 음수 나머지가 어떻게 계산되는지 특히 주의하십시오.
cd ~/project
go run opePractice.go
a = 10 b = 3
-----
a + b = 13
a - b = 7
b - a = -7
a * b = 30
a / b = 3
10.0 / 3 = 3.3333333333333335
a % b = 1
10 % -3 = 1
-10 % 3 = -1
-10 % -3 = -1
Go 에서
++
(증가, increment) 및--
(감소, decrement) 는 독립적인 문장이며, 독립적으로만 사용될 수 있습니다. 연산자가 아닙니다.
다음 코드는 잘못되었습니다.
var a int = 5
var i int = 0
a = i++ // 잘못된 사용법, 증가는 독립적으로만 사용 가능
a = i-- // 잘못된 사용법, 감소는 독립적으로만 사용 가능
a = ++i // 잘못된 사용법, Go 에는 전위 증가 (pre-increment) 가 없습니다.
a = --i // 잘못된 사용법, Go 에는 전위 감소 (pre-decrement) 가 없습니다.
올바른 구문은 다음과 같습니다.
var i = 0
i++
i++
fmt.Println(i)
opePractice.go
에 다음 코드를 작성합니다.
코드를 완성하세요. 증가 연산자를 사용하여 변수 i
의 값을 변경하여 변수 a
의 값이 16이 되도록 하세요.
package main
import "fmt"
func main() {
var a int = 15
var i int = 0
/* 아래에 코드 작성 */
a = a + i
fmt.Println(a)
// a 의 출력이 16 이 되도록 코드를 완성하세요.
}
관계 연산자는 무엇일까요?
관계 연산자는 일종의 비교로, 두 값 간의 관계를 설명합니다. 두 값이 같은지, 한 값이 다른 값보다 큰지 또는 작은지를 결정합니다.
연산자 | 관계 |
---|---|
== |
같음 (Equal to) |
!= |
같지 않음 (Not equal to) |
> |
큼 (Greater than) |
>= |
크거나 같음 (Greater than or equal to) |
< |
작음 (Less than) |
<= |
작거나 같음 (Less than or equal to) |
위의 연산자는 조건이 성공하면
true
를 반환하고, 그렇지 않으면false
를 반환합니다.
opePractice.go
에 다음 코드를 작성합니다.
package main
import "fmt"
func main() {
// 관계 연산자 사용
var a int = 7
var b int = 6
// 같은지 확인
fmt.Println(a == b) //false
// 같지 않은지 확인
fmt.Println(a != b) //true
// a 가 b 보다 큰지 확인
fmt.Println(a > b) //true
// a 가 b 보다 크거나 같은지 확인
fmt.Println(a >= b) //true
// a 가 b 보다 작은지 확인
fmt.Println(a < b) //false
// a 가 b 보다 작거나 같은지 확인
fmt.Println(a <= b) //false
// 1 이 1 과 같은지 확인
judgeValue := 1 == 1 //true
fmt.Println(judgeValue)
}
코드를 실행합니다.
cd ~/project
go run opePractice.go
위의 코드에서 변수 a
와 b
를 기반으로 관계 비교를 수행했습니다.
학생들은 변수 값을 수정하여 비교 결과를 변경하고 관계 연산자에 대한 더 깊은 이해를 얻을 수 있습니다.
논리 연산자는 무엇일까요?
논리 연산자는 관계 연산자의 고급 형태입니다. 주로 관계 연산자를 결합하여 추가적인 평가를 수행하는 데 사용됩니다.
연산자 | 관계 | 설명 |
---|---|---|
&& |
And | 두 피연산자 모두 true 이면 결과는 true 입니다. |
|| |
Or | 피연산자 중 하나라도 true 이면 결과는 true 입니다. |
! |
Not | 조건이 false 이면 결과는 true 입니다. |
opePractice.go
에 다음 코드를 작성합니다.
package main
import (
"fmt"
)
func main() {
// 논리 AND 연산자 && 시연
var age int = 18
if age > 15 && age < 30 {
fmt.Println("나이는 15 세와 30 세 사이입니다")
}
if age > 30 && age < 80 {
fmt.Println("나이는 30 세와 80 세 사이입니다")
}
// 논리 OR 연산자 || 시연
if age > 15 || age < 30 {
fmt.Println("나이는 15 세보다 크거나 30 세보다 작습니다")
}
if age > 30 || age < 40 {
fmt.Println("나이는 30 세보다 크거나 40 세보다 작습니다")
}
// 논리 NOT 연산자 ! 시연
if age > 30 {
fmt.Println("나이는 30 세보다 큽니다")
}
if !(age > 30) {
fmt.Println("나이는 30 세보다 크지 않습니다")
}
}
위의 코드에서 변수 age
의 값 18
을 기반으로 일련의 논리 평가를 수행했습니다.
코드를 실행합니다.
cd ~/project
go run opePractice.go
학생들은 age 변수 값을 수정하고 코드를 실행하여 출력의 변화를 관찰할 수 있습니다.
논리 AND 및 논리 OR 연산자를 사용할 때 Go 는 연산자 양쪽의 부울 값을 결정해야 합니다. 하지만 어떤 쪽을 먼저 평가할까요?
함께 알아보겠습니다.
opePractice.go
에 다음 코드를 작성합니다.
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) && rightFunc(true) {
fmt.Println("Evaluation is complete")
}
}
코드를 실행합니다.
cd ~/project
go run opePractice.go
Left function is called!
Right function is called!
Evaluation is complete
논리 AND 연산에서 왼쪽 피연산자가 먼저 평가되고, 그 다음 오른쪽 피연산자가 평가된다는 것을 쉽게 알 수 있습니다.
논리 OR 연산은 어떨까요? opePractice.go
에 다음 코드를 작성합니다.
package main
import "fmt"
func leftFunc(flag bool) bool {
fmt.Println("Left function is called!")
return flag
}
func rightFunc(flag bool) bool {
fmt.Println("Right function is called!")
return true
}
func main() {
if leftFunc(true) || rightFunc(true) {
fmt.Println("Logical OR evaluation is complete")
}
}
코드를 실행합니다.
cd ~/project
go run opePractice.go
Left function is called!
Logical OR evaluation is complete
논리 AND 및 논리 OR 연산 모두 왼쪽에서 오른쪽으로 평가됩니다.
그러나 논리 OR 연산에서 왼쪽 피연산자가 true 이면 오른쪽 피연산자는 평가되지 않습니다.
따라서 실제 개발에서는 프로그램 실행 시간을 줄이기 위해 true 가 될 가능성이 높은 조건을 논리 OR 연산자의 왼쪽에 배치해야 합니다.
이전 랩에서 우리는 할당 연산자를 자주 사용했습니다. 할당 연산자의 핵심 기능은 표현식의 값을 왼쪽 피연산자에 할당하는 것입니다.
왼쪽 피연산자 (Left-hand Operand): 할당 연산자 (=) 의 왼쪽에 있는 표현식 또는 변수로, 값을 쓸 수 있습니다.
실제 개발에서는 종종 한 변수에 다른 변수를 더하거나 빼야 합니다.
우리가 배운 내용을 바탕으로 다음과 같은 코드를 작성할 수 있습니다.
x = x + 1
하지만 이러한 종류의 코드는 실제 개발에서 매우 일반적이므로, 이를 위한 단축 형태를 제공합니다.
x += 1
마찬가지로, 일반적으로 사용되는 할당 연산자는 다음과 같습니다.
연산자 | 설명 |
---|---|
= |
기본 할당 연산자 |
+= |
더하고 할당 |
-= |
빼고 할당 |
*= |
곱하고 할당 |
/= |
나누고 할당 |
%= |
나머지 연산 후 할당 (remainder) |
opePractice.go
에 다음 코드를 작성합니다.
package main
import "fmt"
func main() {
x := 11
fmt.Println("x 의 초기 값:", x)
x += 5 // x = x + 5
fmt.Println("x += 5 후의 값:", x)
x -= 5 // x = x - 5
fmt.Println("x -= 5 후의 값:", x)
x *= 5 // x = x * 5
fmt.Println("x *= 5 후의 값:", x)
x /= 5
fmt.Println("x /= 5 후의 값:", x)
x %= 3
fmt.Println("x %= 3 후의 값:", x)
}
위의 코드에서 변수 x
에 초기 값 11
을 할당하고 기본 산술 연산 (덧셈, 뺄셈, 곱셈), 나눗셈 및 나머지 연산을 수행합니다.
코드를 실행합니다.
cd ~/project
go run opePractice.go
변수 값을 수정하여 할당 연산자가 어떻게 작동하는지 확인할 수 있습니다.
이번 랩에서 배운 내용을 복습해 보겠습니다.
이번 랩에서는 Go 에서 연산자를 사용하는 방법에 대해 논의했습니다. 다양한 연산자와 그 사용법을 시연했습니다.