<목차>
• 문자열
자바에서 문자열(String)은 텍스트 데이터를 나타내는 데 사용되는 자료형이다.
문자열은 여러 개의 문자들로 구성되거나 단일 문자일 수도 있다. 'String' 클래스는 자바의 기본 라이브러리에 포함되어 있어서 별도로 임포트하지 않고도 사용할 수 있다.
1. 문자열 생성
String str1 = "Hello, Java"; // 문자열 리터럴을 사용하여 생성
String str2 = new String("Hello, Java"); // new 키워드를 사용하여 생성
new 키워드는 객체를 만드는 경우 사용된다. 하지만 되도록 첫 번째 줄에서 사용한 리터럴(literal) 표기 방식을 사용하는 것이 가독성도 좋고 컴파일에 최적화하기 좋다. 추가적으로 설명하면 두 방법은 결과적으로는 같은 문자열을 갖지만 리터럴 방식은 고정된 값만을 갖는다면 두 번째 방법은 항상 새로운 객체를 생성하게 된다.
2. 문자열 결합
String firstName = "John";
String lastName = "David";
Stirng fullName = firstName + " " + lastName;
3. 문자열 길이(length() : 문자열의 길이를 반환한다.)
Stirng str = "Hello, Java";
int length = str.length(); // 11이라는 값이 저장된다.
4. 문자열 특정 위치 문 반환(charAt(int index) : 주어진 인덱스의 문자를 반환한다.)
char character = str.charAt(7); // 'J'가 character에 저장된다.
5. 문자열 추출(substring(int beginIndex, int endIndex) : 지정한 범위의 부분 문자열을 추출한다.)
String sub = str.substring(7, 11); // "Java"가 sub에 저장된다.
6. 문자열 연결(concat(String str) : 주어진 문자열을 현재 문자열에 연결한다.)
String newStr = str.concat(" Welcome!"); // "Hello, Java Welcome!" 문자열이 저장된다.
7. 문자열 비교(equals(String another) : 다른 문자열과 현재 문자열을 비교한다.)
String str1 = "apple";
String str2 = "banana";
boolean isEqual = str1.equals(str2); // 문자열 비교, false 저장됨
boolean isEqual = str.equals("Hello, Java"); // true가 isEqual에 저장됨
8. 대소문자를 무시하고 문자열 비교(equalsIgnoreCase(String another))
boolean isEqualIgnoreCase = str.equalsIgnoreCase("hello, JAVA"); // true가 저장된다.
9. 처음 문자열이 나오는 위치 반환(indexOf(String str) : 지정한 문자열이 처음으로 나오는 인덱스 반환)
int index = str.indexOf("Java"); // index에 7이 저장된다.
10. startsWith(String prefix) / endsWith(String suffix) : 입력된 접두사 또는 접미사로 시작/끝나는지 검사
boolean startsWith = str.startsWith("Hello"); // true가 startsWith에 저장된다.
boolean endsWith = str.endsWith("Java"); // true가 endsWith에 저장된다.
11. toLowerCase() / toUpperCase() : 문자열을 각각 소문자 또는 대문자로 변환합니다.
String lower = str.toLowerCase(); // "hello, java"가 lower에 저장된다.
String upper = str.toUpperCase(); // "HELLO, JAVA"가 upper에 저장된다.
12. 문자열 교체(replace(char oldChar, char newChar))
String replaced = str.replace('H', 'G'); // "Gello, Java"가 된다.
13. 문자열 분열(split(String str) : 특정 구분 문자로 나누워 문자열 배열로 반환한다.)
import java.util.Arrays;
public class sample {
public static void main (String[] args) {
String a = "apple banana orange";
String[] results = a.split(" ");
System.out.println(Arrays.toString(results)); // Arrays.toString이 없으면 [Ljava.lang.String;@1b6d3586 이라고 출력된다.
for (String result : results) { // 단어 하나씩 출력하고 싶으면 반복문을 이용하면 된다.
System.out.println(result);
}
}
}
자바의 'String' 클래스는 불변(Immutable)하다는 특징을 가지며, 한 번 생성된 문자열은 변경할 수 없다. 문자열을 조작하는 메서드들은 새로운 문자열을 생성하여 변환하므로, 문자열을 수정하려면 새로운 변수에 결과를 저장해야 한다.
• 문자열 포매팅
포매팅은 문자열을 원하는 형식으로 표현하는 과정을 말한다. 포매팅을 사용하면 숫자, 날짜, 시간, 문자열 등을 특정 패턴에 따라 문자열로 변환하거나 문자열을 숫자나 날짜와 같은 데이터 타입으로 변환할 수 있다.
자바에서 포매팅을 표현하는 방법은 다음과 같이 있다.
1. String.format()
해당 메서드를 사용하여 문자열을 원하는 형식으로 포매팅할 수 있다. 추가적인 내용으로 C언어의 'printf()' 함수와 비슷한 서식 지정자(format specifier)를 사용해야 한다.
int number = 1776;
String formatted = String.format("The year of independence in the United States is %d.", number)
// 결과 : "The year of independence in the United States is 1776."
2. DecimalFormat 클래스
해당 클래스는 숫자를 원하는 형식으로 포매팅을 할 수 있는데 숫자의 소수점, 천 단위 구분 기호 등을 지정할 수 있다.
double value = 1234.5678;
DecimalFormat df = new DecimalFormat("#,##0.00");
String formatted = df.format(value);
// 결과 : "1,234.57"
3. SimpleDateFormat 클래스
날짜와 시간을 원하는 형식으로 포매팅할 수 있다. 날짜와 시간 패턴을 이용하여 원하는 형식을 지정할 수 있다.
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdf.format(now);
// 결과로 현재 날짜와 시간이 출력된다.
4. DateTimeFormatter 클래스(Java 8 이상)
해당 클래스는 'LocalDate', 'LocalTime', 'LocalDateTime' 등의 날짜와 시간 객체를 원하는 형식으로 포매팅할 수 있다.
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formmater = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = now.format(formatter);
// 결과는 현재 날짜와 시간이 출력된다.
포매팅은 다른 언어에서도 지원하며 사용 방법은 매우 유사하다. 파이썬 게시글에서도 다룬 적이 있으며 파이썬은 이보다 더 유연한 출력 방식들을 지원한다.
참고(파이썬의 예시) - https://bluenoa.tistory.com/5
문자형 자료(인덱싱, 슬라이싱, 포매팅)
· 문자형 자료 문자형 자료는 대체로 "" 또는 '' 등으로 둘러싸여 있는 것들을 말한다. 예를 들어 "안녕하세요" 혹은 '반가워요' 등이 모두 문자열이다. 파이썬에서 주석처리를 할 때 사용하는 """
bluenoa.tistory.com
• 포맷 코드
포매팅 예시에서 첫 번째 예시에서 사용한 %d와 같은 것이 포맷 코드이다. 포맷 코드는 여러 종류가 있는데 각 상황에 맞게 특정 문자열에 대입할 수 있는 기능을 제공한다.
1. 정수형 포매팅
%d : 10진수 정수로 포매팅한다.
%o : 8진수 정수로 포매팅
%x : 16진수 정수로 포매팅
2. 실수 포매팅
%f : 소수점 형태로 포매팅
%e 또는 %E : 지수 형태로 포매팅
3. 문자열 포매팅
%s : 문자열을 포매팅한다.
4. 문자 포매팅
%c : 문자를 포매팅한다.
5. 논리값 포매팅
%b : 논리값(true 또는 false)로 포매팅
6. 폭과 정렬 지정
%n$ : n번째 인수
%-10d : 왼쪽 정렬로 10칸 폭을 가지는 정수 포매팅
7. 소수점 자릿수 지정
%.2f : 소수점 이하 두 자리까지 포매팅한다.
※만약 '%'를 출력하고 싶은 경우 '%%'로 입력하면 된다.
<예제> 예제에서는 하나의 값만 입력하지만 다수의 종류가 다른 값을 대입할 수 있다.
public class sample {
public static void main (String[] args) {
int number = 12;
double pi = 3.14159;
String name = "Alice";
System.out.printf("Number : %d\n", number);
System.out.printf("Pi : %.2f\n", pi);
System.out.printf("정렬 : %5d\n", number);
System.out.printf("이름 : %s", name);
}
}
<결과>
Number : 12 Pi : 3.14 정렬 : 12 이름 : Alice |
예제에서는 printf를 사용하였지만 println을 사용하고 싶은 경우 출력 내용에 String.format()을 사용하면 된다.
• 원시 자료형
원시 자료형(Primitive Data Types)은 데이터의 기본 단위로, 변수에 직접 값을 저장한다.
원시 자료형은 메모리의 크기와 동작 방식에 따라 다양한 종류로 나누어지는데 크게 8개로 구분지을 수 있다.
참고 - https://bluenoa.tistory.com/77#text2
자바 - 변수와 자료의 형태
변수 자료형 추가 내용 - Heap영역이란? • 변수 변수(Variable)란 데이터를 저장하는 메모리 공간을 뜻한다. 변수는 프로그램에서 사용되는 값을 보관하거나 조작하는 데 사용되며, 변수를 사용한
bluenoa.tistory.com
byte, short, int, long, float, double, char, boolean 자료형을 원시 자료형이라고 한다.
이러한 원시 자료형은 new 키워드로 값을 생성할 수 없다. 오직 리터럴 방식으로만 값을 정할 수 있다.
단 주의해야 할 것이 있는데 String은 리터럴 표기 방식을 사용할 수 있지만 원시 자료형에는 포함되지 않는다.
이러한 원시 자료형에게는 Wrapper 클래스란 것이 존재하는데 즉 원시 자료형을 객체로 감싸주는 클래스다.
풀어서 설명하면 원시 자료형을 객체 지향 프로그램 환경에 맞게 객체로 다룰 수 있도록 해준다.
Wrapper 클래스의 주요 목적은 다음과 같이 정리할 수 있다.
1. 원시 자료형을 객체로 사용 가능하게 해준다.
2. 객체 지향 기능 활용 : 예를 들어 메서드 호출, 클래스 상속, 인터페이스 구현 등의 장점을 활용할 수 있다.
3. Null 값 처리 가능 : 원시 자료형은 항상 기본적인 값을 갖고 있어야 하기 때문에 null 값은 가질 수 없다. 하지만 이를 가능하게 해주는 역할을 한다.
<원시 자료형과 Wrapper 클래스 목록>
- Byte : byte
- Short : short
- Integer : int
- Long : long
- Float : float
- Double : double
- Character : char
- Boolean : boolean
<예시>
// Integer 클래스
Integer num = new Integer(10); // 원시 자료형 int의 값을 감싸는 Integer 객체 생성
int value = num.intValue(); // Integer 객체에서 원시 자료형 int 값 추출
// Double 클래스
Double pi = new Double(3.14159); // 원시 자료형 double의 값을 감싸는 객체 생성
double value = pi.doubleValue(); // 값 추출
// Character 클래스
Character letter = new Character("A");
char value = letter.charValue();
// Boolean 클래스
Boolean flag = new Boolean(true);
boolean value = flag.booleanValue();
// 자동 박싱과 언박싱
Integer number = 10; // 자동 박싱
int result = number * 2; // 자동 언박싱 후 연산
마지막에 나온 자동 박싱과 언박싱을 간단히 설명하면 다음과 같다.
자동박싱(Autoboxing) : Wrapper 클래스 객체로 자동으로 변환해주는 기능이다. new Integer(값) 과 같은 입력 없이 바로 입력할 값을 넣어주면 된다.
자동 언박싱(Unboxing) : Wrapper 클래스 객체에서 자동으로 원시 자료형의 값을 추출해주는 기능이다. 이를 통해 연산이나 메서드 호출에서 사용하면 자동으로 해당 객체의 원시 자료형 값이 추출된다.
'자바(JAVA)' 카테고리의 다른 글
자바 - 배열(Array) (0) | 2023.08.14 |
---|---|
자바 - StringBuffer 클래스 (0) | 2023.08.11 |
자바 - 변수와 자료의 형태 (0) | 2023.08.08 |
자바 - 소스코드(형태, 요소 등) (0) | 2023.08.01 |
자바 - 싱글톤 패턴(Singleton Pattern) (0) | 2023.07.22 |