[Java] 연산자와 문자열 포맷터

김선형·2025년 9월 6일

Java

목록 보기
3/27

연산자

산술 연산자

+, -, *, /, %: 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산

비교 연산자

==, !=, <, >, <=, >=: 두 값의 크기나 동등성 비교

논리 연산자

&&, ||, !: AND, OR, NOT

대입 연산자

=, +=, -=, *=, /=, %=: 값을 변수에 저장하거나 연산 후 대입

증감 연산자

++, --: 값 1 증가 또는 감소 (전위, 후위 모두 가능)

삼항 연산자

condition ? trueValue : falseValue: 조건에 따라 값을 선택

비트 연산자

&, |, ^, ~: AND, OR, XOR, NOT
<<, >>, >>>: 왼쪽 시프트, 오른쪽 시프트 (부호 유지), 오른쪽 시프트 (부호 무시)

문자열 연결 연산자

+: 문자열을 이어 붙일 때 사용

문자열 포맷터 (Formatter)

서식 문자열 포맷터: String.format(), printf()

텍스트에 서식 지정자를 사용하여 값을 삽입한다.

서식 지정자

  • %s: 문자열
  • %d: 10진수 정수
  • %f: 실수 (소수점 기본 6자리)
  • %c: 문자
  • %b: boolean 값
  • %%: % 자체
public class Main {

    public static void main(String[] args) {
        String name = "Alice";
        int age = 20;
        double pi = 3.141592;

        System.out.println(String.format("Name: %s, Age: %d", name, age)); // Name: Alice, Age: 20
        System.out.println(String.format("pi: %.2f", pi)); // pi: 3.14

        System.out.printf("|%10s|\n", "Java"); // |      Java|
        System.out.printf("|%-10s|\n", "Java"); // |Java      |

        System.out.printf("%05d\n", 1); // 00001
    }
}

메시지 포맷터: MessageFormat

순번 기반 포맷 ({0}, {1})을 사용한다. {index[, type[, subformat]]} 형태로 지정한다.

  • type (optional): number, date, time, choice, etc.
  • subformat (optional): 숫자, 날짜의 구체적인 포맷 지정
import java.text.MessageFormat;
import java.util.Date;

public class Main {

    public static void main(String[] args) {
        String pattern = "Name: {0}, Age: {1}";
        String result = MessageFormat.format(pattern, "Alice", 20);
        System.out.println(result); // Name: Alice, Age: 20

        Date today = new Date();
        String message_date = MessageFormat.format("Today is {0, date, yyyy-MM-dd}.", today);
        System.out.println(message_date); // Today is 2025-09-06.

        String message_amount =
                MessageFormat.format("Total Amount:{0, number, #,###.00}", 1234567.89);
        System.out.println(message_amount); // Total Amount: 1,234,567.89
    }
}

숫자 포맷터: DecimalFormat

숫자에 천 단위 쉼표, 소수점 자리수 등 포맷을 지정한다.

예시

  • 천 단위 구분: "#,###"
  • 소수점 둘째 자리 : "#.00", "0.00"
  • 퍼센트 변환: "##.##%"
  • 통화 표시: "₩#,###"
  • 자릿수 고정 채우기: "00000"
import java.text.DecimalFormat;

public class Main {

    public static void main(String[] args) {
        DecimalFormat df1 = new DecimalFormat("#,###.00");
        System.out.println(df1.format(1234.567)); // 1,234.57

        DecimalFormat df2 = new DecimalFormat("00000");
        System.out.println(df2.format(42)); // 00042

        DecimalFormat df3 = new DecimalFormat("#.00");
        System.out.println(df3.format(3.1)); // 3.10
        System.out.println(df3.format(3.141)); // 3.14 (반올림)
    }
}

날짜 포맷터: DateTimeFormatter

날짜/시간을 포맷팅한다.

기호의미예시 (값)
y연도 (year)2025
M월 (month)07, 7, Jul
d일 (day)01~31
E요일Tue, 수요일
H시 (0~23)00~23
h시 (1~12)01~12
m분 (minute)00~59
s초 (second)00~59
a오전/오후AM, PM
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {

    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String formatted = today.format(formatter);

        System.out.println("Today is " + formatted); // Today is 2025-09-06

        String dateStr = "2025-09-06";
        LocalDate parsedDate = LocalDate.parse(dateStr, formatter);
        System.out.println("Parsed date: " + parsedDate); // Parsed date: 2025-09-06

        System.out.println(LocalDate.now().format(DateTimeFormatter.ISO_DATE)); // 2025-09-06
        System.out.println(LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME)); // 2025-09-06T14:10:39.136909
        System.out.println(LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)); // 20250906
    }
}

StringBuilder 포맷: StringBuilder.append()

문자열을 빠르고 효율적으로 조립 (append)할 수 있는 클래스이다. 반복적이거나 동적으로 문자열을 생성할 때 유용하며, 포맷 효과를 수동으로 구성한다.

public class Main {

    public static void main(String[] args) {
        String name = "Alice";
        int age = 20;

        StringBuilder sb1 = new StringBuilder();
        sb1.append("Name: ").append(name).append(", Age: ").append(age);
        System.out.println(sb1.toString()); // Name: Alice, Age: 20

        StringBuilder sb2 = new StringBuilder();
        sb2.append(String.format("%-10s", name)).append(String.format("%5d", age));
        System.out.println(sb2.toString()); // Alice 20
    }
}

✏️ StringBuilder vs StringBuffer

항목StringBuilderStringBuffer
스레드 안전성스레드 안전하지 않음스레드 안전함 (synchronized)
성능빠름 (단일 스레드 환경에서 권장)느림 (동기화 오버헤드 있음)
사용 시점단일 스레드 또는 동기화 불필요한 경우 사용멀티 스레드 환경에서 동시 접근이 필요한 경우
도입 시기Java 5 이후Java 초창기부터
대체 관계StringBuffer의 비동기화 버전StringBuilder보다 안정적이나 느림
기본 메서드append(), insert(), delete(),
toString(), etc.
동일
profile
선형의 비선형적 기록 🐜

0개의 댓글