개발로 GO하자!, 연산자와 자료형

gicomong·2021년 2월 14일
2

개발로 GO하자

목록 보기
2/2
post-thumbnail

시작하기 전에

  • 이전 포스팅에서는 출력문과 변수에 대한 공부를 하였는데요,
  • 아래는 출력문과 변수에 대한 핵심 코드입니다 :)
package main
import "fmt"

func main() {
	var num1 int = 3   //1. 변수선언(1)
	num2 := 7	   //2. 변수선언(2)

	result := num1 + num2   

	//3. 출력방법(변수 삽입)
	fmt.Printf("%d과 %d의 합은 %d입니다.", num1, num2, result)  
}

추가로 알기, const

  • const는 한번 선언되면 수정할 수 없다.
  • 그러므로, 고유값을 초기화 할 때 사용한다.
  • ()를 사용하여 상수 변수를 여러 개 선언할 수 있다.
package main

import "fmt"

//여러 상수 변수 선언
const (
	name = "Kim"
	RRN = "800101-1000000"
	job
)

func main() {
	fmt.Println(name, '\n', RRN, '\n',  job)
}


1. Go 기초

3) 연산자

(1) 연산자 종류

|종류|설명|
|---|---|
|+|덧셈, 문자 결합|
|-|뺄셈|
|*|곱셈|
|/|나눗셈|
|%|나눈 뒤 나머지|


(2) 증감 연산자

  • 증감 연산자는 값을 1 증가 혹은 감소시키는 연산자이다.
  • js, java에도 존재하지만, Go에선 이 연산자 사용시 주의사항이 있다.
    : _첫 번째, 증감 연산자를 사용하고 동시에 대입할 수 없다. _
    : 두 번째, 전위 연산을 할 수 없다.
//안돼요!
num := count++  (선언과 동시에 대입 불가)
++count         (전위 연산자 금지!)


//돼요!
count1, count2 := 1, 10.4	
count1++
count2--	

(3) 할당 연산자

  • 할당 연산자는 python, c를 사용했다면 익숙한 연산자이다.
  • 이 연산자를 사용하면 2가지 연산을 동시에 진행할 수 있다.
  • |= 은 값의 OR연산 후 대입한다.

|종류|설명|
|---|---|
|:=|변수 선언 후 대입|
|+=|값을 더한 후 대입|
|-=|값을 뺀 후 대입|
|*=|값을 곱한 후 대입|
|/=|값을 나눈 후 대입|
|%=|값을 나눈 나머지를 대입|
|&=|값의 AND연산 후 대입|
|^=|값의 XOR연산 후 대입|
|&^=|값의 AND NOT 비트 연산 후 대입|
|<<=|비트를 왼쪽으로 이동 후 대입 |
|>>=|비트를 오른쪽으로 이동 후 대입|


(4) 논리 연산자

  • 논리 연산자는 다른 언어와 동일하다.
  • ||은 둘 중 하나만 참이면 참을 반환한다.

|종류|설명|
|---|---|
|&&|둘 다 참이면 참을 반환|
|!|참이면 거짓, 거짓이면 참을 반환|


(5) 관계 연산자

  • 두 값의 대소와 동등 관계를 따지는 연산자이다.
  • 조건에 만족하면 참(true), 그렇지 않으면 거짓(false)을 반환한다.

|종류|설명|
|---|---|
|==|두 값이 같은지 비교|
|!=|두 값이 다른지 비교|
|<|오른쪽 값이 큰지 비교|
|<=|오른쪽 값이 크거나 값은지 비교|
|>|왼쪽 값이 큰지 비교|
|>=|왼쪽 값이 크거나 같은지 비교|


(6) 채널 연산자

  • go언어에만 있는 특이한 연산자이다.
  • 이 연산자는 채널 챕터에서 별도로 다루도록 한다.

[추가] 변수 바로 출력하기

  • 우리는 앞서 연산자를 확인해 보았다.
  • 우리는 연산자를 사용해 이미 정의된 값을 계산하기도 하지만, 사용자가 입력한 값을 계산하고자 할때도 쓰인다.
  • 그렇다면 어떻게 사용자로부터 값을 입력받을까?
  • 아래 코드를 보자!
package main
import 'fmt'

func main() {
	var num1, num2, num3 int
    
    fmt.Print("정수 3개를 입력하세요")
    fmt.Scanln(&num1, &num2, &num3)    //입력받기
    fmt.Println(num1 + num2 + num3)
}
  • 우리는 Scanln을 사용해 특정 값을 사용자로부터 받을 수 있다는 걸 알게 되었다!

4) 자료형

go언어도 다른 언어와 마찬가지로 자료형이 존재한다.
이 챕터에서는 자료형에 대한 간단한 내용만 알아보자!

(1) 문자열 표현하기

  • Back Quote(문자열)로 문자열 표현하기
    : 모양이 인용부호(' ')와 비슷하지만 다른 기호이다.
    : Back Quote 안에 있는 문자열은 어느 기호든 문자열 자체로 인식한다.
    : 예를 들어, \n은 개행의 역할을 하지 않고 단순히 문자열로 출력된다.

  • 이중인용부호("문자열")로 문자열 표현하기
    : ""안에 이스케이프 시퀀스(\n) 문자열들은 특정 기능을 수행한다.
    : ""안에서 엔터를 쳐도, 한 줄에 표현된다.

package main

import "fmt"

func main() {
	// Raw String Literal
    	// 출력: hello \n Golang
	var rawLiteral string = `hello \n Golang`

	// Interpreted String Literal
    	// 출력: hello 
        //      Golang
	var interLiteral string = "hello \nGolang"

	// 출력: 쉽게 배우는
    	//	Golang
	plusString := "쉽게 배우는 " + "\n" + "Golang"
}

(2) 자료형 변환하기

  • go 언어에서는 형 변환을 할 때, 변환을 명시적으로 지정해줘야 한다.
  • 만약, num1float32로 변환할 때는 float32(num)이라고 써야 한다.
package main

import "fmt"

func main() {
	var num int = 10
	var changef float32 = float32(num) //int형을 float32형으로 변환
	changei := int8(num)               //int형을 int8형으로 변환

	var str string = "goorm"
	changestr := []byte(str) //바이트 배열
	str2 := string(changestr) //바이트 배열을 다시 문자열로 변환
}

우리는 go에서 형변환할 때, 변환하고자 하는 자료형을 명시해야한다는 점을 알게 되었다. 그렇다면 아래와 같이, int형의 두 변수를 계산한 값을 float형에 담는다면 어떻게 될까? (3/4를 한 값인 0.75가 그대로 들어갈까?)

package main

import "fmt"

func main() {
	var num1, num2 int = 3, 4
	var result float32 = num1 / num2	
	fmt.Printf("%f", result)   //런타임 에러!
}

결과는 런타임 에러가 발생한다.
이유1) 연산식의 결괏값과 그것을 저장하려는 변수의 자료형이 다르므로
이유2) go에서는 다른 언어처럼 자동형변환이 발생하지 않기에

  • 위에 같은 이유로 인해 다른 자료형의 결과값을 저장하려면, num1과 num2를 float32로 형변환해줘야 한다.
profile
⚠ 이 블로거는 퇴근 후 극심한 피로감 + 강렬한 휴식 욕구로 인해 일주일 이상 포스팅이 없을 수 있습니다. 하지만 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글