Julia Language

[Julia] 기초 문법 공부 - 문자와 문자열의 모든 것

공부하는백수 2021. 4. 17. 04:22

※ 다음 링크에서 줄리아 프로그래밍과 관련한 글 목록을 확인하실 수 있습니다.

Julia 프로그래밍 관련 글 목록


선언하기

문자(Character)는 작은따옴표(' ')로 감싼다.

다른 언어와 마찬가지로 당연히 문자 하나만 입력받을 수 있다.

typeof(A)는 A의 데이터 타입을 확인하는 연산자이다.

1
2
3
4
julia> str = "C"
"C"
julia> typeof(chr)
Char
cs

 

문자열(String)은 큰 따옴표(" ")로 감싼다.

자의 길이와 무관하게 큰 따옴표로 감싸면 무조건 문자열로 인식한다.

1
2
3
4
julia> str = "C"
"C"
julia> typeof(str)
String
cs

 

여러 줄에 문자열 쓰기

  아래와 같이 """ 문자열 """ 방식을 사용한다. 이때, 아래 결과와 같이 자동으로 개행문자(\n)가 삽입된다.

1
2
3
4
5
6
7
8
julia> multiline_str = """
 
                       This is the first line.
 
                       This is the second line.
 
                       """
"\nThis is the first line.\n\nThis is the second line.\n\n"
cs

요소 접근과 슬라이싱

문자열의 특정 위치에 접근하려면 [인덱스] 형태로 접근한다.즉, 파이썬과 매트랩에서 쓰던 방식과 동일하다.

 줄리아는 매트랩과 마찬가지로 1을 기본 인덱스로 하기 때문에 아래 예제와 같이 1:3이라고 인덱스를 입력하면 첫 번째 문자부터 세 번째 문자까지 접근한다.

 매트랩에 익숙한 사람이라면 end라는 예약어가 문자열(배열)의 마지막 인자에 접근하는데 사용된다는 사실이 매우 반가울 것이다. 줄리아는 매트랩과 유사한 문법 구조가 많은데 특히 배열 접근과 연산이 매트랩과 매우 유사하다. end 예약어는 매트랩에서와 마찬가지로 반복문과 조건문의 마지막에 사용되기도 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
julia> mystr = "apple_"
"apple_"
 
julia> println(mystr[1])
a
 
julia> println(mystr[1:3])
app
 
julia> println(mystr[end])
_
 
julia> println(mystr[end-1:end])
e_
cs

  위에서 println()이라는 출력함수를 사용하였는데 이 함수는 입력 인자를 전부 문자열로 자동으로 변환한 후 마지막에 개행문자까지 자동으로 넣어주기 때문에 사용하기에 편리하다. Julia에서는 출력함수가 많이 있지만 일단 여기서는 println() 함수만 사용하기로 한다.


문자열의 길이와 크기

문자열의 길이는 length() 함수를 사용하여 확인이 가능하다.

sizeof() 함수를 사용하면 문자열의 크기를 바이트 단위로 확인할 수 있다. 한글의 경우 한 글자가 2바이트일 것이라고 예상했는데 확인해보니 글자당 3바이트로 확인되었다. (C언어에서는 sizeiof 연산자라고 부르는데 줄리아에서는 함수라고 부르는 것 같다.)

1
2
3
4
5
6
7
8
julia> println(length(mystr))
6
 
julia> println(sizeof(mystr))
6
 
julia> println(sizeof("한글입니다"))
15
cs

문자열 병합 (Concatenation)

파이썬에서는 더하기 연산으로 여러 문자열들을 결합하였는데 줄리아에서는 곱하기 연산을 사용한다. 아래 예제에서 첫 번째 줄에 first_str, second_str, third_str을 한 줄에 선언하였기 때문에 세미콜론을 사용하였다. 세미콜론이 없다면 에러가 발생한다.

1
2
3
julia> first_str = "apple_"; second_str= "banana_"; third_str = "mango_";
julia> println(first_str*second_str*third_str)
apple_banana_mango_
 
cs

  줄리아 메뉴얼 문서에 따르면 수학적으로 더하기라 함은 A+B=B+A를 만족하여야 마땅하나 "문자열1"+"문자열2"≠"문자열2"+"문자열1" 이기 때문에 문자열 병합 연산에 더하기 대신 곱하기 연산자를 사용하였다고 한다. 곱하기 연산은 스칼라 간의 곱셉을 제외하고는 일반적으로 인자의 순서가 바뀌면 결과도 바뀌므로 그럴 듯한 논리이다. 그렇지만 개인적으로는 파이썬에서의 더하기 연산이 더 직관적으로 느껴진다.

  문자열 병합 방법은 곱하기 연산이 유일하지 않다. 아래와 같이 string() 함수를 사용해도 된다. 참고로 곱하기 연산과 string() 함수로 char형 문자를 병합하면 출력은 당연히 문자열이 된다.

1
2
3
julia> println(string(first_str, second_str, third_str))
apple_banana_mango_
 
 
cs

문자열 반복 (Concatenation)

  문자열 병합 연산과 마찬가지로 문자열 반복 연산 역시 두 가지 방식이 존재한다.

  • 연산자를 이용하는 방법 ^ 연산자
  • 연산자 함수를 이용하는 방법 → repeat() 함수

특정 패턴을 반복하고자 할 때에는 repeat() 함수를 사용한다. repeat() 함수는 문자열 뿐만 아니라 array에도 동작한다. 단, 스칼라 넘버를 입력하면 오류가 발생한다. 사용법의 이해를 위해 아래 코드를 천천히 살펴보길 추천한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
julia> "ABC_"^10
"ABC_ABC_ABC_ABC_ABC_ABC_ABC_ABC_ABC_ABC_"
 
julia> repeat("ABC_"10)
"ABC_ABC_ABC_ABC_ABC_ABC_ABC_ABC_ABC_ABC_"
 
julia> repeat([1 2 3], 10# 행 방향으로 10번 반복
10×3 Array{Int64,2}:
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 1  2  3
 
julia> repeat([1 2 3], 110# 열 방향으로만 반복하고 싶을 때
1×30 Array{Int64,2}:
 1  2  3  1  2  3  1  2  3  1  2  3  1  2  3  1  2  3  1  2  3  1  2  3  1  2  3  1  2  3
 
julia> repeat(10110# error
 
julia> repeat([10], 110# 스칼라를 크기 1 array로 변경 후 반복하면 okay
1×10 Array{Int64,2}:
 10  10  10  10  10  10  10  10  10  10
 
cs

문자열 보간 (Interpolation)

  문자열을 병합하는 것은 때때로 번거로운 일이 될 수 있다. 특히, 병합하고자 하는 대상 중 숫자도 포함되어 있다면 병합 시 string 함수로 숫자를 문자열로 변환하는 과정도 거쳐야 한다. 줄리아에서는 이러한 수고를 덜기 위해 문자열 보간이라는 개념을 소개하고 있다. 문자열 보간은 "$"기호를 쓴다. 문자열 보간 예제는 다음과 같다.

1
2
3
4
5
6
7
julia> a = 1;  b = 2;
 
julia> println("a + b = ", string(a + b))
+ b = 3
 
julia> println("a + b = $(a + b)")
+ b = 3
cs

문자열 일부 변경

문자열은 배열 상수이다. 때문에 선언 후에는 특정 위치의 문자를 바꿀 수 없다. 그러나 기존에 선언된 문자열에 str = "xyz" 형태로 새로운 문자열을 할당하는 것은 가능하다. 그럼에도 불구하고 다음과 같은 두 가지 방법을 사용한다면 문자열 내 특정 위치의 문자(혹은 특정 문자)만을 선택적으로 바꿀 수 있다.

  • 특정 위치의 문자를 바꿀 때: concatenation과 slicing 기법 결합
  • 특정 문자만 바꿀 때: replace() 함수 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
julia> str = "ABCDEFG"
"ABCDEFG"
 
julia> str = "BBCDEFG" # 새로 선언하는 것이므로 가능
"BBCDEFG"
 
julia> # str[1] = "A" # error
 
julia> str = "A" * str[2:end]
"ABCDEFG"
 
julia> str=replace(str"A" => "a")
"aBCDEFG"
 
cs

문자열 비교 연산

문자열에 비교 연산자를 사용할 수 있다. 이때, 대소비교는 문자열의 (바이트) 크기를 기준으로 한다. (길이 기준이 아님에 유의)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
julia> str1 = "ABC"
"ABC"
 
julia> str2 = "ABCDE"
"ABCDE"
 
julia> str1 == str2
false
 
julia> str1 != str2
true
 
julia> str1 < str2
true
cs

 

유용한 문자열 함수들

  줄리아에서는 문자와 문자열을 보다 손쉽게 다루기 위한 많은 함수들이 제공되고 있다. 이러한 함수들을 사용하는 방법들은 위 내용들과 별개로 살펴볼 수 있다. 앞의 내용들이 모두 이해되었다면 아래 글의 내용을 살펴보기로 하자.

[Julia] 기초 문법 공부 - 문자열을 다루기에 유용한 함수들