[java] int형 문자열로 취급 - valueOf

CHOI HONGSEO·2026년 3월 27일

문자열 접합(+): String.valueOf(a) + String.valueOf(b)라고 써도 되지만,

int ba = Integer.parseInt("" + b + a); 처럼 빈 문자열을 앞에 두면 자바가 알아서 뒤의 숫자들을 문자열로 취급해 붙여준다. (이때 a,b는 int형이고 “”를 통해 문자열로 취급한다.)

public static int solution(int a, int b) {
        int ab = Integer.parseInt("" + a + b);
        int ba = Integer.parseInt("" + b + a);
        return (ab >= ba) ? ab : ba;
    }

Math.max(): 삼항 연산자 (a > b) ? a : b 대신 자바 표준 라이브러리인 Math.max(ab, ba)를 쓰면 코드가 훨씬 더 직관적이게 된다.

public int solution(int a, int b) {
        String strA = String.valueOf(a);
        String strB = String.valueOf(b);
        String strSum1 = strA + strB;
        String strSum2 = strB + strA;
        return Math.max(Integer.valueOf(strSum1), Integer.valueOf(strSum2));
    }
public int solution(int a, int b) {
        int ab = Integer.parseInt(Integer.toString(a) + Integer.toString(b));
        int ba = Integer.parseInt(Integer.toString(b) + Integer.toString(a));
        return ab >= ba ? ab : ba;
    }

String.valueOf(a) vs Integer.toString(a)

둘 다 숫자를 문자열로 바꾸는 역할이지만 내부적인 작동 방식에 약간의 차이 존재

  • String.valueOf(a): 내부적으로 Integer.toString(a)을 호출합니다. 즉, Integer.toString을 한 번 더 감싸놓은 형태로 만약 입력값이 null이라면 "null"이라는 문자열을 반환하는 안전장치가 존재
  • Integer.toString(a): 정수(int)를 직접 문자열로 변환하는 가장 직접적인 메서드

숫자를 문자로: "" + a 또는 String.valueOf(a)

Integer.valueOf() vs Integer.parseInt()

이 둘도 비슷하지만 반환하는 타입이 다릅니다.

  • Integer.parseInt(s): 결과값으로 기본형(int)을 반환 (산술 연산에 최적화)
  • Integer.valueOf(s): 결과값으로 객체형(Integer)을 반환합니다.

그럼 왜 parseInt 대신 valueOf를 써도 돌아가나요?
자바에는 Auto-boxing/Unboxing이라는 기능이 있어서, 객체(Integer)를 숫자(int)가 필요한 곳에 넣으면 자바가 알아서 꺼내서 사용한다. 하지만 단순히 숫자 비교나 연산을 위해서라면 메모리 효율상 parseInt를 쓰는 것이 정석이다.

Integer. 이나 String.을 앞에 붙여야 하는 이유

자바는 모든 메서드가 특정 클래스 안에 소속되어 있어야 합니다. 이때 'Static 메서드(정적 메서드)'라는 개념이 등장합니다.

  • 도구함 개념: Integer라는 클래스는 "정수와 관련된 유용한 도구들의 집합소"
  • 우리가 망치가 필요할 때 공구함.꺼내기(망치) 하듯이, 문자열을 숫자로 바꾸는 도구가 Integer라는 공구함 안에 들어있기 때문에 Integer.parseInt()라고 부르는 것입니다.
  • 마찬가지로 문자열 관련 도구는 String 공구함에 들어있어 String.valueOf()라고 씁니다.

Integer vs int (대문자와 소문자의 차이)

  1. int (기본형, Primitive Type): 단순히 숫자 값만 저장
    • int a = 10; 처럼 쓰며, 별도의 기능(메서드)이 없습니다. (a.parseInt() 이런 게 안됨.)
  2. Integer (래퍼 클래스, Wrapper Class):
    • 기본형인 int를 객체로 감싸서 다양한 기능(메서드)을 제공
    • 그래서 "문자열을 숫자로 바꾸는 기능" 같은 복잡한 로직은 소문자 int가 아니라 대문자 Integer 클래스가 가지고 있는 것입니다.

최종 요약

  • valueOf(a) 를 쓰면 Integer.toString(a)을 호출해 a의 값이 null(즉 아무값도 없으면) 이를 String.valueof(a)라 하면 “null”로 출력된다. 아래 표 참조!!
케이스상태String.valueOf(a) 결과
참조조차 안 됨String a = null;"null" (글자 그대로 출력)
빈 문자열 입력String a = "";"" (눈에 보이지 않는 빈 공간 출력)
  • valueOf는 특정 타입 전용이 아니라, 그 클래스의 타입으로 변환하겠다는 뜻
profile
곧 성공할 개발자입니다.

0개의 댓글