ToString이란?
ToString()은 모든 객체(object)가 가지고 있는 메서드(method)로, 객체(object)를 문자열(string)로 변환하는 기능입니다. 숫자를 문자열(string)로 바꾸거나, 객체(object)의 정보를 텍스트로 표현할 때 사용합니다.
기본 개념
- ToString(): 객체(object)를 문자열(string)로 변환하는 메서드(method)
- 기본 제공: 모든 클래스(class)는 Object에서 상속(inheritance)받아 ToString()을 가지고 있음
- 오버라이드: 클래스(class)에 맞게 ToString()을 재정의할 수 있음
- 포맷 지정자: 숫자를 원하는 형식으로 변환할 수 있음
기본 사용법
숫자를 문자열(string)로 변환
using UnityEngine;
public class BasicToString : MonoBehaviour
{
void Start()
{
int number = 100;
string text = number.ToString();
Debug.Log("숫자: " + text);
float pi = 3.14f;
string piText = pi.ToString();
Debug.Log("원주율: " + piText);
bool isTrue = true;
string boolText = isTrue.ToString();
Debug.Log("불린: " + boolText);
}
}
문자열(string) 보간과 함께 사용
using UnityEngine;
public class StringInterpolation : MonoBehaviour
{
void Start()
{
int score = 1500;
int level = 5;
string message = $"점수: {score.ToString()}, 레벨: {level.ToString()}";
Debug.Log(message);
string message2 = $"점수: {score}, 레벨: {level}";
Debug.Log(message2);
}
}
숫자 포맷 지정자
정수(integer) 포맷
using UnityEngine;
public class IntegerFormat : MonoBehaviour
{
void Start()
{
int number = 12345;
Debug.Log(number.ToString());
Debug.Log(number.ToString("D"));
Debug.Log(number.ToString("D8"));
Debug.Log(number.ToString("x"));
Debug.Log(number.ToString("X"));
Debug.Log(number.ToString("X8"));
}
}
실수(float) 포맷
using UnityEngine;
public class FloatFormat : MonoBehaviour
{
void Start()
{
float number = 1234.5678f;
Debug.Log(number.ToString());
Debug.Log(number.ToString("F"));
Debug.Log(number.ToString("F2"));
Debug.Log(number.ToString("F4"));
Debug.Log(number.ToString("E"));
Debug.Log(number.ToString("e"));
Debug.Log(number.ToString("G"));
Debug.Log(number.ToString("N"));
Debug.Log(number.ToString("N2"));
Debug.Log(number.ToString("C"));
Debug.Log(number.ToString("C2"));
}
}
퍼센트 형식
using UnityEngine;
public class PercentFormat : MonoBehaviour
{
void Start()
{
float ratio = 0.75f;
Debug.Log(ratio.ToString("P"));
Debug.Log(ratio.ToString("P0"));
Debug.Log(ratio.ToString("P2"));
}
}
날짜/시간 포맷
DateTime ToString
using System;
using UnityEngine;
public class DateTimeFormat : MonoBehaviour
{
void Start()
{
DateTime now = DateTime.Now;
Debug.Log(now.ToString());
Debug.Log(now.ToString("d"));
Debug.Log(now.ToString("D"));
Debug.Log(now.ToString("t"));
Debug.Log(now.ToString("T"));
Debug.Log(now.ToString("yyyy-MM-dd HH:mm:ss"));
Debug.Log(now.ToString("MM/dd/yyyy"));
}
}
클래스(class)에서 ToString() 오버라이드
기본 ToString()
using UnityEngine;
public class Player
{
public string name;
public int level;
public int hp;
}
public class ToStringOverride : MonoBehaviour
{
void Start()
{
Player player = new Player();
player.name = "용사";
player.level = 10;
player.hp = 100;
Debug.Log(player.ToString());
}
}
ToString() 오버라이드
using UnityEngine;
public class Player
{
public string name;
public int level;
public int hp;
public override string ToString()
{
return $"이름: {name}, 레벨: {level}, HP: {hp}";
}
}
public class ToStringOverride : MonoBehaviour
{
void Start()
{
Player player = new Player();
player.name = "용사";
player.level = 10;
player.hp = 100;
Debug.Log(player.ToString());
}
}
Unity MonoBehaviour에서 ToString()
using UnityEngine;
public class Enemy : MonoBehaviour
{
public string enemyName;
public int hp;
public int maxHp;
public override string ToString()
{
return $"{enemyName} (HP: {hp}/{maxHp})";
}
void Start()
{
enemyName = "고블린";
hp = 50;
maxHp = 50;
Debug.Log(this.ToString());
}
}
실전 활용 예시
예시 1: 점수 표시
using UnityEngine;
using UnityEngine.UI;
public class ScoreDisplay : MonoBehaviour
{
public Text scoreText;
private int score = 0;
void Update()
{
scoreText.text = "점수: " + score.ToString();
scoreText.text = $"점수: {score}";
}
void AddScore(int points)
{
score += points;
}
}
예시 2: 시간 표시
using System;
using UnityEngine;
using UnityEngine.UI;
public class TimeDisplay : MonoBehaviour
{
public Text timeText;
void Update()
{
float time = Time.time;
int minutes = (int)(time / 60);
int seconds = (int)(time % 60);
timeText.text = $"{minutes.ToString("D2")}:{seconds.ToString("D2")}";
}
}
예시 3: 퍼센트 표시
using UnityEngine;
using UnityEngine.UI;
public class HealthBar : MonoBehaviour
{
public Text healthText;
public int currentHp = 75;
public int maxHp = 100;
void Update()
{
float percentage = (float)currentHp / maxHp;
healthText.text = $"체력: {percentage.ToString("P0")} ({currentHp}/{maxHp})";
}
}
예시 4: 통화 표시
using UnityEngine;
using UnityEngine.UI;
public class CurrencyDisplay : MonoBehaviour
{
public Text goldText;
private int gold = 1234567;
void Update()
{
goldText.text = "골드: " + gold.ToString("N0");
goldText.text = gold.ToString("C0");
}
}
예시 5: 디버그 정보 출력
using UnityEngine;
public class DebugInfo : MonoBehaviour
{
public Vector3 position;
public float speed;
public bool isMoving;
public override string ToString()
{
return $"위치: {position}, 속도: {speed.ToString("F2")}, 이동 중: {isMoving}";
}
void Update()
{
Debug.Log(this.ToString());
}
}
주요 포맷 지정자 요약
숫자 포맷
| 포맷 |
설명 |
예시 |
D 또는 d |
10진수 |
123.ToString("D") → "123" |
D5 |
10진수 (5자리) |
123.ToString("D5") → "00123" |
X |
16진수 (대문자) |
255.ToString("X") → "FF" |
x |
16진수 (소문자) |
255.ToString("x") → "ff" |
F 또는 f |
고정 소수점 |
3.14.ToString("F2") → "3.14" |
E 또는 e |
지수 표기법 |
1234.ToString("E") → "1.234000E+003" |
N 또는 n |
숫자 형식 (천 단위 구분) |
1234.ToString("N") → "1,234.00" |
C 또는 c |
통화 형식 |
1234.ToString("C") → "₩1,234" |
P 또는 p |
퍼센트 |
0.75.ToString("P") → "75.00 %" |
날짜 포맷
| 포맷 |
설명 |
예시 |
d |
짧은 날짜 |
DateTime.Now.ToString("d") → "2024-01-15" |
D |
긴 날짜 |
DateTime.Now.ToString("D") → "2024년 1월 15일" |
t |
짧은 시간 |
DateTime.Now.ToString("t") → "오후 3:30" |
T |
긴 시간 |
DateTime.Now.ToString("T") → "오후 3:30:45" |
yyyy-MM-dd |
커스텀 형식 |
DateTime.Now.ToString("yyyy-MM-dd") → "2024-01-15" |
주의사항
- null 처리: null 객체(object)에서 ToString()을 호출하면 NullReferenceException 발생
- 성능: 문자열(string) 보간(
$"...")이 ToString()을 자동으로 호출하므로 편리함
- 로케일: 통화(C)나 날짜 포맷은 시스템 로케일에 따라 달라질 수 있음
- 오버라이드: 클래스(class)에 맞게 ToString()을 오버라이드하면 디버깅에 유용함
실전 활용 팁
팁 1: null 체크와 함께 사용
using UnityEngine;
public class NullSafeToString : MonoBehaviour
{
void Start()
{
object obj = null;
string result = obj?.ToString() ?? "null";
Debug.Log(result);
if (obj != null)
{
Debug.Log(obj.ToString());
}
}
}
팁 2: 여러 값 조합
using UnityEngine;
public class CombineValues : MonoBehaviour
{
void Start()
{
int score = 1500;
int level = 5;
float time = 123.45f;
string info = $"점수: {score.ToString("N0")}, 레벨: {level}, 시간: {time.ToString("F2")}초";
Debug.Log(info);
}
}
팁 3: 조건부 포맷
using UnityEngine;
public class ConditionalFormat : MonoBehaviour
{
void Start()
{
float number = 1234.567f;
string formatted = number % 1 == 0
? number.ToString("N0")
: number.ToString("F2");
Debug.Log(formatted);
}
}
팁 4: 리스트(list) 요소 출력
using System.Collections.Generic;
using UnityEngine;
public class ListToString : MonoBehaviour
{
void Start()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
string result = string.Join(", ", numbers.ConvertAll(x => x.ToString()));
Debug.Log(result);
}
}
← 목차로 돌아가기