String 클래스
문자열은 문자가 모여있는 형태를 말한다.
한 개의 문자(character) 데이터를 저장할 때 사용하는 타입(type)이 char 인 것처럼
문자열(string) 데이터를 저장할 때는 string 타입을 사용한다.
그리고 string 타입은 값이 저장되어 있는 주소(address)를 참조하는 reference type(참조 타입)이라는 점이 중요하다.
반면 char 타입은 값을 직접 저장하는 value type이다.
string 사용에 필요한 메서드와 속성(프라퍼티)는 System.String 이라는 class 안에 만들어져 있다.
반면 char 는 System.Char 라는 struct 형태로 만들어져 있다.
C#의 String클래스 안에는 다양한 속성과 메서드가 있다.
자주 사용하는 몇 가지를 알아본다.
1. Length
Length(길이)는 문자열의 길이를 int타입의 값으로 반환하는 프라퍼티(속성)이다.
19번 줄은 $로 시작하는 형식 ( $"변수 text3 길이: {text3.Length}" )과 다른 형식으로 나타내었다.
둘 다 같은 결과가 나온다.
2. IndexOf( ) 메서드
IndexOf(~의 색인) 메서드는 문자열에 인덱스(색인) 번호를 매겨서 인수로 전달한 문자열의 인덱스 번호를 반환한다.
해당 문자열이 없으면 -1을 반환한다.
3. Replace( ) 메서드
Replace(교체하다)메서드는 문자열을 다른 문자열로 대체하는 메서드이다.
일치하는 문자열을 원하는 문자열로 교체하므로 전달하는 인수는 2개가 필요하다.
4. Split( ) 메서드
Split(쪼개다) 메서드는 문자열을 전달한 문자 형태의 인수를 기준으로 나누고 배열(array)로 반환한다.
12번줄에서는 text2를 문자 'h'를 기준으로 분리하고,
13번줄에서는 text3을 공백 문자를 기준으로 분리했다.
21번줄은 foreach 반복문을 사용하여 요소를 변수 print에 저장한다.
string타입의 print라는 변수에 text3Array 안에(in) 있는 요소들을 저장한 후 22번줄에서 print값을 출력해 보았다.
5. Substring( ) 메서드
Substring 메서드는 문자열을 전달한 인덱스 형태의 인수를 기준으로 잘라서 반환한다.
12번줄은 문자열 text3을 3번 인덱스 부터 끝까지 잘라서 반환한다.
13번줄은 3번 인덱스 부터 길이6 만큼 잘라서 반환한다.
14번줄은 인덱스 번호를 잘 모를 경우 IndexOf메서드로 원하는 문자열의 인덱스를 반환받아서 Substring의 인수로 사용하면 된다.
6. String.Format( ) 메서드
String.Format( )메서드는 문자열 안에 변수 등의 값을 넣어야 할 경우에 중괄호 { } 를 이용해서 삽입하는 방법이다.
즉, 문자열로 포맷(서식)을 변경해주는 기능을 한다.
이 메서드는 네임스페이스 System 안에 정의되어 있다.
그러므로 System이라는 네임스페이스 안에 String이라는 클래스 안에 Format( )이라는 메서드가 정의되어 있는 구조이다.
유니티 콘솔 창에 Debug.Log메서드를 사용하여 문자열을 출력하는 몇 가지 방법이 있다.
13번줄 처럼 문자열을 큰따옴표 안에 넣어서 직접 나타내는 방법이 있다.
14번줄 처럼 문자열이 저장되어 있는 변수명을 넣어도 된다.
16번줄 처럼 String.Format( ) 메서드를 사용하는 방법이 있다.
이 경우 문자열에서 값을 넣어야 할 곳에 중괄호 안에 인덱스 시작 번호 0을 넣고 그것에 해당하는 값이나 식을 쉼표로 구분하여 다음에 적어주면 된다. 인덱스 번호는 여러 개 넣을 수 있다.
단, 이런 형태의 메서드 사용은 String 클래스를 직접 사용하기 때문에 2번줄 처럼 using 키워드를 사용해서 클래스가 속해 있는 네임스페이스 명을 표시해야 한다.
19번줄 에서는 소문자 s 로 시작하는 string.Format을 사용했다.
이것은 System.String 클래스를 나타내는 또 다른 이름이므로 이 형태로 사용하면 using System을 사용할 필요는 없다.
즉, using System을 사용하지 않아도 String.Format()과 같은 기능을 한다.
위와 같은 방법이 불편했던지 C# 버전 6.0 부터는 22번줄 처럼 $ 기호와 중괄호를 사용하여 간단하게 값을 넣을 수 있게 되었다. 이런 방법을 string interpolation (문자열 채우기) 라고 한다.
interpolation은 우리말로 보간(사이에 추가) 또는 내삽(안에 삽입)으로 부를 수 있다.
string.Format( )메서드에는 서식이 정해져 있는 문자열 형태로 나타내 주는 기능도 있다.
예를 들어 날짜와 시간을 나타내는 경우 다음과 같다.
8번 줄과 같이 DateTime 클래스에 있는 Now 프라퍼티는 네임스페이스 System 에 정의되어 있으며 날짜(Date)는 D, 시간(Time)은 T로 약자가 지정되어 있다.
위와 같이 표시하면 컴퓨터 시스템에서 불러와서 나타내준다.
DateTime클래스를 사용하려면 using System을 사용해야 한다.
또 하나의 예를 들면 서식 포맷으로 자동 반올림 할 수 있다.
반올림 해서 표시하고 싶을 때 위와 같이 표시할 자릿수까지 # 기호를 적어준다.
위와 같이 하면 자동으로 반올림해서 소숫점 둘째자리까지 나타내준다.
String클래스에는 지금까지 살펴본 속성과 메서드 이외에도 많은 메서드들이 정의되어 있지만 나머지는 게임 코드 작성시에 사용해 보도록 한다.
string 타입 변환
이전 글(변수, 타입변환)에서 '타입 변환'과 그것에 사용하는 연산자에 대해 알아보았다.
그런데 정수 타입 등을 string(문자열) 타입으로 변환할 때는 명시적 타입변환이나 타입변환 연산자를 사용할 수 없다.
이 경우에 사용하는 메서드가 따로 있다.
ToString( )
to string은 '문자열로' 라는 뜻이다.
어떤 타입을 문자열 타입으로 변환하려면 ToString메서드를 사용해야 한다.
역으로 string타입의 변수를 숫자 타입으로 변환하려면 Parse( ) 메서드를 사용한다.
8번줄에서 float타입의 num1을 int로 변환하기 위해서 괄호 안에 명시적 변환을 사용했다.
크기(범위)가 큰 타입인 float을 더 작은 int타입으로 변환하려면 명시적 변환을 사용해야 한다.
9번줄에서 int타입을 string타입으로 변환하려면 ToString()메서드를 사용해야 한다.
11,12번줄에서 string타입을 int 또는 float타입으로 변환하려면 Parse()메서드를 사용해야 한다.
14~16번줄에서 각 변수의 값을 출력하면 모두 같은 105가 나온다.
그렇지만 18~20번줄에서 각 변수의 타입을 가져오기 위해 GetType()메서드를 사용하고 이름(Name) 속성으로 타입명을 출력하면 각각 String , Int32 , Single 로 나타난다.
참고로 Single은 float 타입의 .Net(닷넷) 형식으로 표현한 것이므로 float와 같은 타입이다.
Int32는 int 크기가 32비트라는 것을 나타내며 int와 같은 타입이다.
int 보다 작은 크기인 short타입은 int16 이며,
int 보다 큰 크기인 long타입은 int64 로 표현한다.
그러므로 정수형 타입은 작은 크기부터 short < int < long 이다.
Parse( )
*parse : 구문 분석
이번에는 반대로 문자열을 숫자 타입으로 변환해본다.
숫자 타입으로 변환하려면 숫자타입명.Parse( ) 를 사용한다.
7번 줄에 변수stringType에 문자열을 저장한다.
8번 줄에서 변수intType에 문자열 타입의 변수를 Parse()메서드 매개변수로 전달해서 int타입으로 변환한 값을 저장한다.
10~12번 줄에서 intType 값, 타입 이름과 변수를 넣어서 비교한 문장을 출력해 보면 다음과 같이 나타날 것이다.
14번 줄에서 변수stringType에 문자열 1.05를 저장한다.
15번 줄에 변수floatType에 문자열을 float타입으로 변환한 값을 저장한다.
17~19번 줄에서 floatType값, 타입이름과 변수를 넣어서 비교한 문장을 출력해 보면 다음과 같이 나타날 것이다.
Single 과 float는 같은 타입이라고 조금 전에 설명했다.
끝.
Wraven...
'취미로 하는 게임코딩_gameCodingAsHobby > 유니티unity로 게임 만들기' 카테고리의 다른 글
유니티36_C#_21_Collection 컬렉션 (0) | 2021.03.22 |
---|---|
유니티35_C#_20_static 스태틱 (0) | 2021.03.22 |
유니티33_게임 제작 과정 11_적 랜덤 위치 소환 (0) | 2021.03.19 |
유니티32_게임 제작 과정 10_에셋스토어 (0) | 2021.03.18 |
유니티31_게임 제작 과정 09_아이템 기능 추가 (0) | 2021.03.18 |