Chapter 5. 문자열

조성권·2021년 8월 7일
0
post-thumbnail

오늘은 문자열에 대해 조금 더 배워보고자 한다.
문자열을 초기화하는 방법부터 연산, 수정하는 방법까지 학습하고 기록해보도록 하겠다.

1. 문자열 기초

1-1 문자열 정의

문자열을 정의하는 방법은 크게 두가지 방법이 있는 것 같다.

var string1 string = "조성권"		// Case 1. string으로 Type 선언
string1 := "조성권"				// Case 2. := 사용

위 두가지 방법은 모두 오류 없이 진행된다.
하지만 차이가 있다면 :=을 쓸 때는 변수의 선언과 동시에 초기화해줘야 한다는 것이다.

1-2 문자열 길이 구하기

위와 같이 문자열을 생성한 후, 문자열의 길이를 확인하는 것 역시 많이 사용하게 될 것이다.
다음 예시를 통해 함께 살펴보도록 하겠다.

var string1 string = "조성권"
var string2 string = "Hello"

fmt.Println("string1's length: ", len(string1))	// 9: UTF-8 인코딩의 Byte 길이
fmt.Println("string2's length: ", len(string2))	// 5: 알파벳 길이

위의 예시를 통해 알 수 있는 것은 한글은 우리가 원하는 실제 길이가 아닌 Byte길이를 구한다는 것이다.

만약 실제 길이를 구하고 싶다면 다음과 같이 작성해야한다.

import "unicode/utf8" // import에 라이브러리 추가
			.
            		.
fmt.Println("string1.length: ", utf8.RuneCountInString(string1)) // 2: 실제 한글 길이

utf8.RuneCountInString(string): 문자열의 실제 길이를 구하는 함수

2. 문자열 연산

2-1 문자열 합치기

var string3 string = "Hello"
var string4 string = "world"

string5 := string3 + string4	// Case 1. := 사용하기

var string5 string
string5 = string3 + string4		// Case 2. 선언 후, 정의

위 예시에서 알 수 있는 것은 문자열을 합칠 때, 사용되는 연산자는 '+'라는 것이다.
이는 다른 언어들과 유사하다고 볼 수 있기 때문에 크게 어려움을 느낄 부분은 없는 것 같다.

2-2 문자열 비교

golang은 문자열을 비교할 때, '==' 연산자를 활용한다.
그럼 예시를 통해 알아보도록 하겠다.

var string6 string = "Hello"
var string7 string = "world"
var string8 string = "hello"
var string9 string = "Hello"


fmt.Println("string6 == string7? ", string6 == string7)	// false
fmt.Println("string6 == string8? ", string6 == string8) // false
fmt.Println("string6 == string9? ", string6 == string9) // true

위 예시를 실행시켜보면 각 요소를 비교했을 때 결과(true or false)가 나오는 것을 볼 수 있다.
문자열의 차이(대소문자 포함)를 확인하고 그에 대한 결과가 출력되는 것을 확인할 수 있으며 이는 추후 조건문에서 가장 많이 활용될 것으로 생각된다.

2-3 문자열 요소 출력

문자열의 각 요소는 배열 형태로 저장된다고 볼 수 있다.
가령, "Hello"라는 문자열이 있다고 가정하면 index는 0~4까지 있으며 s[0] == 'H'이고 s[4] == 'o'라고 볼 수 있다.

그럼 이 문자를 출력하는 방법에 대해 알아보겠다.

var string5 = "HelloWorld"

fmt.Println("string5[0]: ", string5[0]) // 72: 'H'라는 문자의 10진수 값
fmt.Printf("string5[0]: %c\n", string5[0]) // H: 실제 문자

위 예시처럼 fmt.Println을 통해 문자열 요소 값을 출력하려 하면 원하는 값을 찾을 수 없다.
문자열의 요소값을 출력하고자 한다면 fmt.Printf 함수를 통해 출력해야 한다.

golang은 객체지향 언어의 대표 JAVA와 절차지향 언어의 대표 C의 혼합체라는 느낌을 강하게 받는다.

JAVA와 C의 문자열의 요소 출력 예시

  • JAVA
    System.out.println("string5[0]: " + string5[0]);
  • C
    printf("string5[0]: %c\n", string5[0]);

두 예시를 보면 golang은 두 언어의 성격을 모두 포함하고 있는 언어라고 볼 수 있다.

  • JAVA에선 위와 같이 작성하면 원하는 요소값을 출력할 수 있지만 golang에선 다르므로 주의해야 한다는 것을 다시 한번 강조한다.

3. 문자열 수정

golang은 문자열 자체를 다시 수정하는 것은 가능하지만 각 요소값을 일부 수정하는 것은 불가하다.
무슨 말인지 예제를 통해 알아보도록 하겠다.

var string6 string = "HelloWorld"
string6 := "Hello"

fmt.Println("string6: ", string6)

string6[0] = 'S'	// Compile Error

위 예제를 실행시키면 마지막 라인에서 Compile Error가 발생하는 것을 확인할 수 있다.
그 이유는 위에서 언급한 것처럼 golang은 문자열의 부분수정이 불가하기 때문이다.
값을 수정하기 위해선 재정의하는 과정을 통해 진행해야하며 특정 index를 지목해서 그 값을 바꾸는 것은 불가하다.

4. 마무리

오늘은 문자열을 가지고 노는 방법에 대해 배워보는 시간을 가져봤다.
매우 기초적인 부분이기도 하고 다른 언어와 유사한 부분이 있어 크게 어려운 부분은 없었던 것 같다.
분주하게 더 배워나가서 실제 웹 프로그래밍에 golang을 적용해보고 싶다.

오늘자 전체 소스 git
https://github.com/cho876/Go/tree/main/Prac05

profile
천천히, 완벽히 배워나가고자 하는 웹 서비스 엔지니어

0개의 댓글