์ฝ๊ธฐ ์ ์
ํด๋น ํฌ์คํธ๋ Java ๋ฌธ๋ฒ์ ๊น๊ฒ ๋ค๋ฃจ๊ณ ์์ง ์์ต๋๋ค! Java ์ธ์ด๋ฅผ ์์ ํ ์ฒ์ ์ ํ๋ ๋ถ๋ค๊ป ํฌ๊ฒ ๋์์ด ๋์ง ์์ ์ ์์ต๋๋ค. ๊ฐ๋จํ๊ฒ ์ฌ๋ฌ ๊ณณ์ ์ฐธ๊ณ ํ๋ฉด์ ์ ๋ฆฌ ๋ฐ ์ถ๊ฐํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ถ์กฑํ๊ฑฐ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค.
Java ์๋ฃํ
์์ ํ์ (Primitive Type)
์์ ํ์
์ ๊ฐ ์์ฒด๋ฅผ ์ ์ฅํ๋ฉฐ, ์คํ ์์ญ์ ์ ์ฅ๋๋ค. ==
์ ์ฌ์ฉํด์ ๊ฐ์ ๋น๊ตํ ์ ์๋ค.
์ ์ํ - byte, short, int, long
- byte (1๋ฐ์ดํธ, 8๋นํธ) : -128 ~ 127 ๋ฒ์
- short (2๋ฐ์ดํธ, 16๋นํธ) : -32,768 ~ 32,767 ๋ฒ์
- int (4๋ฐ์ดํธ, 32๋นํธ) : -2,147,483,648 ~ 2,147,483,647 ๋ฒ์
- long (8๋ฐ์ดํธ, 64๋นํธ) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ๋ฒ์
L
์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉ (long num = 10000000000L;
)
์ค์ํ - float, double
- float (4๋ฐ์ดํธ, 32๋นํธ) : ๋ถ๋ ์์์ ๋ฐฉ์, ์์์ 7์๋ฆฌ ์ ๋์ ์ ๋ฐ๋ ๊ฐ์ง
f
๋๋F
์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉ (float pi = 3.14f;
)
- double (8๋ฐ์ดํธ, 64๋นํธ) : ๋ถ๋ ์์์ ๋ฐฉ์, ์์์ 15์๋ฆฌ ์ ๋์ ์ ๋ฐ๋ ๊ฐ์ง
- ์๋ฐ์์ ๊ธฐ๋ณธ ์ค์ํ์ผ๋ก ์ฌ์ฉ (
double pi = 3.14;
)
- ์๋ฐ์์ ๊ธฐ๋ณธ ์ค์ํ์ผ๋ก ์ฌ์ฉ (
๋ฌธ์ํ - char
- char (2๋ฐ์ดํธ, 16๋นํธ) : ์ ๋์ฝ๋ ๋ฌธ์ ์ ์ฅ, ์์ ๋ฐ์ดํ(') ์ฌ์ฉ (
'A'
,'ํ'
,'\uAC00'
)
๋ ผ๋ฆฌํ - boolean
- boolean (1๋นํธ) :
true
๋๋false
๊ฐ๋ง ์ ์ฅ ๊ฐ๋ฅ
์ฐธ์กฐ ํ์ (Reference Type)
์ฐธ์กฐ ํ์
์ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ํ์
์ผ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก null
๊ฐ์ ๊ฐ์ง ์ ์๋ค. ํ ์์ญ์ ์ ์ฅ๋๋ค. ==
์ ์ฌ์ฉํ๋ฉด ์ฃผ์๋ฅผ ๋น๊ตํ ์ ์๊ณ , equals()
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ๋น๊ตํ ์ ์๋ค.
ํด๋์ค (Class)
String
,Integer
,ArrayList
๋ฑ ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด ํฌํจ
String name = "Java";
์ธํฐํ์ด์ค (Interface)
- ํน์ ๋์์ ์ ์ํ๋ ์ถ์์ ์ธ ํ์
Runnable task = new Task();
๋ฐฐ์ด (Array)
- ๊ฐ์ ํ์ ์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
- ์ด๊ธฐํ ๋ฐฉ๋ฒ
int[] arr = new int[5]; // {0, 0, 0, 0, 0}
double[] dArr = new double[3]; // {0.0, 0.0, 0.0}
boolean[] bArr = new boolean[2]; // {false, false}
int[] numbers = {1, 2, 3, 4, 5};
String[] strings = {"Java", "Python", "C++"};
// ๋ฉ์๋ ๋ด๋ถ์์ ๋ฐฐ์ด์ ์์ฑํด์ ์ธ์๋ก ๋๊ธธ ๋๋ ๋ฐ๋์ new ํค์๋ ์ฌ์ฉ
printArray(new int[]{1, 2, 3, 4, 5});
// Stream์ ์ด์ฉํ ์ด๊ธฐํ
import java.util.stream.IntStream;
int[] arr = IntStream.range(0, 5).toArray(); // {0, 1, 2, 3, 4}
๋ํผ ํด๋์ค
- ์์ ํ์ ์ ๊ฐ์ฒด๋ก ๊ฐ์ธ๋ ํด๋์ค๋ก, ์์ ํ์ ์ ๊ฐ์ฒด๋ก ๋ค๋ฃฐ ๋ ์ฌ์ฉ
Byte
,Short
,Integer
,Long
,Float
,Double
,Character
,Boolean
ํ๋ณํ
๋ฌธ์(char) → ์ซ์
char ch = 'S';
int num = Character.getNumericValue(ch);
System.out.println(num); // 5
๋ฌธ์์ด(String) → ์ซ์
Integer.parseInt()
,Double.parseDouble()
,Float().parseFloat()
๋ฑ ์ฌ์ฉ → ๋ณํํ ๋ฌธ์์ด์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐNumberFormatException
๋ฐ์
String str1 = "123";
String str2 = "45.67";
String str3 = "8.9";
int num1 = Integer.parseInt(str1);
double num2 = Double.parseDouble(str2);
float num3 = Float.parseFloat(str3);
System.out.println(num1); // 123
System.out.println(num2); // 45.67
System.out.println(num3); // 8.9
Integer.valueOf()
,Double.valueOf()
,Float.valueOf()
๋ฑ ์ฌ์ฉ → ๊ฐ์ฒด ํํ๋ก ๋ฐํํ์ง๋ง ํ์ํ ๊ฒฝ์ฐ ์๋ ์ธ๋ฐ์ฑ ํตํด ๊ธฐ๋ณธํ์ผ๋ก ๋ณํ
String str1 = "123";
String str2 = "45.67";
String str3 = "8.9";
int num1 = Integer.valueOf(str1);
double num2 = Double.valueOf(str2);
float num3 = Float.valueOf(str3);
System.out.println(num1); // 123
System.out.println(num2); // 45.67
System.out.println(num3); // 8.9
์ซ์ → ๋ฌธ์(char)
- ๋ํ๊ธฐ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ ๋์ฝ๋ ๊ฐ ํ์ฉ → ์ง๊ด์ ์ด๊ณ ํจ์จ์
int num = 5;
char ch = (char) (num + '0');
System.out.println(ch); // '5'
Character.forDigit()
์ฌ์ฉ → ๋ณดํต ์ฌ๋ฌ ์ง๋ฒ์ ์ซ์๋ฅผ ๋ฌธ์๋ก ๋ฐ๊ฟ ๋ ์ฌ์ฉ
int num = 10;
char ch = Chacter.forDigit(num, 16);
System.out.println(ch); // 'a'
- ๋ฌธ์์ด๋ก ๋ณํ ํ ๋ฌธ์ ์ถ์ถ → ๋นํจ์จ์ ์ด์ง๋ง, ์ซ์๊ฐ ์ฌ๋ฌ ์๋ฆฌ์ผ ๋ ์ ์ฉ
int num = 5;
char ch = Integer.toString(num).charAt(0);
System.out.println(ch); // '5'
์ซ์ → ๋ฌธ์์ด(String)
String.valueOf()
์ฌ์ฉ
int num = 123;
double dNum = 45.67;
float fNum = 8.9f;
System.out.println(String.valueOf(num)); // "123"
System.out.println(String.valueOf(dNum)); // "45.67"
System.out.println(String.valueOf(fNum)); // "8.9"
Integer.toString()
,Double.toString()
,Float.toString()
๋ฑ ์ฌ์ฉ
int num = 123;
double dNum = 45.67;
float fNum = 8.9f;
System.out.println(Integer.toString(num)); // "123"
System.out.println(Double.toString(dNum)); // "45.67"
System.out.println(Float.toString(fNum)); // "8.9"
- ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์ ์ฌ์ฉ → ๊ฐ๋จํ์ง๋ง ์ฑ๋ฅ์ ๋นํจ์จ์
int num = 123;
double dNum = 45.67;
float fNum = 8.9f;
System.out.println(num + ""); // "123"
System.out.println(dNum + ""); // "45.67"
System.out.println(fNum + ""); // "8.9"
์ปฌ๋ ์ ํ๋ ์์ํฌ(Collection)
์ปฌ๋ ์ ์ด๋?
๋ฐ์ดํฐ(๊ฐ์ฒด)๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๊ณ ๋ค๋ฃฐ์ง๋ฅผ ์ ์ํ๋ ๊ฐ๋
์ด๋ค. ์๋ฐ์์ ์ ๊ณตํ๋ ์ปฌ๋ ์
์ java.util
ํจํค์ง์ ํฌํจ๋์ด ์๋ค.
List (์์ O, ์ค๋ณต O)
- ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ ์ฅํ๋ฉฐ ์ค๋ณต ํ์ฉ
- ๋ฐฐ์ด๊ณผ ๋น์ทํ์ง๋ง ํฌ๊ธฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ฃผ์ ๊ตฌํ์ฒด:
ArrayList
,LinkedList
,Vector
add(E e) |
๋ฆฌ์คํธ ๋์ ์์ ์ถ๊ฐ |
add(int index, E e) |
ํน์ ์์น์ ์์ ์ฝ์ |
remove(int index) |
ํน์ ์์น ์์ ์ ๊ฑฐ |
remove(Object o) |
ํน์ ์์ ์ ๊ฑฐ |
get(int index) |
ํน์ ์์น ์์ ๊ฐ์ ธ์ค๊ธฐ |
set(int index, E e) |
ํน์ ์์น ์์ ๋ณ๊ฒฝ |
contains(Object o) |
ํน์ ์์ ํฌํจ ์ฌ๋ถ ํ์ธ |
size() |
๋ฆฌ์คํธ ํฌ๊ธฐ ๋ฐํ |
isEmpty() |
๋ฆฌ์คํธ๊ฐ ๋น์ด์๋์ง ํ์ธ |
clear() |
๋ชจ๋ ์์ ์ ๊ฑฐ |
indexOf(Object o) |
ํน์ ์์์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ๋ฐํ |
lastIndextOf(Object o) |
ํน์ ์์์ ๋ง์ง๋ง ์ธ๋ฑ์ค ๋ฐํ |
toArray() |
๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด๋ก ๋ณํ |
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // ์ค๋ณต ํ์ฉ
System.out.println(list); // [Apple, Banana, Apple]
// ํน์ ์ธ๋ฑ์ค ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
System.out.println(list.get(1)); // "Banana"
// ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธ
System.out.println(list.contains("Cherry")); // false
// ํน์ ๊ฐ์ ์ธ๋ฑ์ค ์ฐพ๊ธฐ
System.out.println(list.indexOf("Banana")); // 1
Set (์์ X, ์ค๋ณต X)
- ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ง ์์
- ์์๋ฅผ ๋ณด์ฅํ์ง ์์ (ํน์ ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ
TreeSet
์ฌ์ฉ) - ์ฃผ์ ๊ตฌํ์ฒด:
HashSet
,TreeSet
,LinkedHashSet
add(E e) |
์์ ์ถ๊ฐ (์ค๋ณต๋ ๊ฐ์ด๋ฉด ์ถ๊ฐ๋์ง ์์) |
remove(Object o) |
ํน์ ์์ ์ ๊ฑฐ |
contains(Object o) |
ํน์ ์์ ํฌํจ ์ฌ๋ถ ํ์ธ |
size() |
Set ํฌ๊ธฐ ๋ฐํ |
isEmpty() |
Set์ด ๋น์ด์๋์ง ํ์ธ |
clear() |
๋ชจ๋ ์์ ์ ๊ฑฐ |
toArray() |
Set์ ๋ฐฐ์ด๋ก ๋ณํ |
iterator() |
Set์ ์์๋ฅผ ์ํํ ์ ์๋ Iterator ๋ฐํ |
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // ์ค๋ณต์ด๋ฏ๋ก ๋ฌด์๋จ
System.out.println(set); // [Apple, Banana] (์ถ๋ ฅ ์์ ๋ค๋ฅผ ์ ์์)
// ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธ (O(1))
System.out.println(set.contains("Cherry")); // false
// HashSet์ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ํน์ ์์น์ ๊ฐ์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์!
// System.out.println(set.get(1)); โ ์๋ฌ ๋ฐ์
// Set์ ๋ฆฌ์คํธ๋ก ๋ณํ ํ ์ ๊ทผ ๊ฐ๋ฅ
ArrayList<String> listFromSet = new ArrayList<>(set);
System.out.println(listFromSet.get(1)); // "Banana" (์ถ๋ ฅ ๊ฐ์ ์์๊ฐ ๋ณด์ฅ๋์ง ์์)
Map (ํค-๊ฐ ์ ์ฅ, ํค ์ค๋ณต X, ๊ฐ ์ค๋ณต O)
- Key-Value ํํ๋ก ์ ์ฅ
- ํค๋ ์ค๋ณต ๋ถ๊ฐ๋ฅ, ๊ฐ์ ์ค๋ณต ๊ฐ๋ฅ
- ์ฃผ์ ๊ตฌํ์ฒด:
HashMap
,TreeMap
,LinkedHashMap
put(K key, V value) |
ํค-๊ฐ ์ถ๊ฐ (์ด๋ฏธ ์กด์ฌํ๋ ํค๋ฉด ๊ฐ ๋ณ๊ฒฝ) |
get(K key) |
ํน์ ํค์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ |
remove(K key) |
ํน์ ํค ์ ๊ฑฐ |
containsKey(K key) |
ํน์ ํค ํฌํจ ์ฌ๋ถ ํ์ธ |
containsValue(V value) |
ํน์ ๊ฐ ํฌํจ ์ฌ๋ถ ํ์ธ |
size() |
Map ํฌ๊ธฐ ๋ฐํ |
isEmpty() |
Map์ด ๋น์ด์๋์ง ํ์ธ |
clear() |
๋ชจ๋ ์์ ์ ๊ฑฐ |
keySet() |
๋ชจ๋ ํค ๋ฐํ (Set<K> ํํ) |
values() |
๋ชจ๋ ๊ฐ ๋ฐํ (Collection<V> ํํ) |
entrySet() |
์ฝ๋ ํค-๊ฐ ์ ๋ฐํ (Set<Map.Entry<K,V>> ํํ) |
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 5);
map.put("Cherry", 20);
map.put("Apple", 20); // ๊ธฐ์กด "Apple" ํค์ ๊ฐ์ด ๋ฎ์ด์ฐ๊ธฐ๋จ
System.out.println(map); // {Apple=20, Banana=5}
System.out.println(map.get("Apple")); // 10 (O(1) ์กฐํ)
// ํน์ ํค ์กด์ฌ ์ฌ๋ถ
System.out.println(map.containsKey("Apple")); // true
// ํน์ ๊ฐ ์กด์ฌ ์ฌ๋ถ
System.out.println(map.containsValue(30)); // false
// ์ญ์
map.remove("Cherry");
// ๋ชจ๋ ํค ์ถ๋ ฅ
System.out.println(map.keySet()); // [Apple, Banana]
// ๋ชจ๋ ๊ฐ ์ถ๋ ฅ
System.out.println(map.values()); // [10, 5]
Queue
- ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋ฃ์ ์์๋๋ก ๊บผ๋ด๋ ๊ตฌ์กฐ(FIFO: First In First Out)
- ์ฃผ์ ๊ตฌํ์ฒด:
LinkedList
,PriorityQueue
offer(E e) |
์์ ์ถ๊ฐ (์ฑ๊ณต ์ true ๋ฐํ) |
poll() |
ํ์์ ์์ ์ ๊ฑฐ ๋ฐ ๋ฐํ (๋น์ด์์ผ๋ฉด null ๋ฐํ) |
remove() |
ํ์์ ์์ ์ ๊ฑฐ (๋น์ด์์ผ๋ฉด ์์ธ ๋ฐ์) |
peek() |
ํ์ ์ฒซ ๋ฒ์งธ ์์ ์กฐํ (์ ๊ฑฐ X, ๋น์ด์์ผ๋ฉด null ๋ฐํ) |
element() |
ํ์ ์ฒซ ๋ฒ์งธ ์์ ์กฐํ (์ ๊ฑฐ X, ๋น์ด์์ผ๋ฉด ์์ธ ๋ฐ์) |
size() |
ํ ํฌ๊ธฐ ๋ฐํ |
isEmpty() |
ํ๊ฐ ๋น์ด์๋์ง ํ์ธ |
clear() |
๋ชจ๋ ์์ ์ ๊ฑฐ |
// ์ผ๋ฐ ํ
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println(queue.poll()); // 1 (๋จผ์ ๋ค์ด์จ ๊ฐ์ด ๋จผ์ ๋๊ฐ)
// ๋งจ ์ ์์ ํ์ธ
System.out.println(queue.peek()); // 2
// ํ์ฌ ํ ์ํ
System.out.println(queue); // [2, 3]
// ์ฐ์ ์์ ํ
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(30);
pq.offer(10);
pq.offer(20);
System.out.println(pq.poll()); // 10 (๊ฐ์ฅ ์์ ๊ฐ๋ถํฐ ์ถ๋ ฅ)
// ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํ ์ต๋ ํ
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
maxHeap.offer(30);
maxHeap.offer(10);
maxHeap.offer(20);
System.out.println(maxHeap.poll()); // 30 (๊ฐ์ฅ ํฐ ๊ฐ๋ถํฐ ์ถ๋ ฅ)
Deque
- ์์ชฝ์์ ์ฝ์ /์ญ์ ๊ฐ ๊ฐ๋ฅํ ํ
- ์คํ์ ๊ตฌํํ ๋๋
Deque
์ ์ฌ์ฉํ๊ธฐ๋ ํจ
offerFirst(E e) |
์์ชฝ์ ์์ ์ถ๊ฐ |
offerLast(E e) |
๋ค์ชฝ์ ์์ ์ถ๊ฐ |
pollFirst() |
์์ชฝ ์์ ์ ๊ฑฐ ๋ฐ ๋ฐํ |
pollLast() |
๋ค์ชฝ ์์ ์ ๊ฑฐ ๋ฐ ๋ฐํ |
peekFirst() |
์์ชฝ ์์ ์กฐํ (์ ๊ฑฐ X) |
peekLast() |
๋ค์ชฝ ์์ ์กฐํ (์ ๊ฑฐ X) |
size() |
ํฌ๊ธฐ ๋ฐํ |
isEmpty() |
๋น์ด์๋์ง ํ์ธ |
clear() |
๋ชจ๋ ์์ ์ ๊ฑฐ |
Deque<Integer> deque = new ArrayDeque<>();
deque.offerFirst(10); // ์์ชฝ์ ์ถ๊ฐ
deque.offerLast(20); // ๋ค์ชฝ์ ์ถ๊ฐ
System.out.println(deque.pollFirst()); // 10 (์์ชฝ์์ ์ ๊ฑฐ)
์ ์ถ๋ ฅ ๋ฐ ๋ฌธ์์ด ๊ด๋ จ ํด๋์ค
BufferedReader, InputStreamReader (์ ๋ ฅ ๊ด๋ จ)
InputStreamReader
:System.in
๊ฐ์ ์ ๋ ฅ์์ ๋ฐ์ดํธ ๋จ์๋ก ์ฝ์ด์จ ๋ฐ์ดํฐ(๋ฐ์ดํธ ๊ธฐ๋ฐ ์คํธ๋ฆผ)๋ฅผ ๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ์ผ๋ก ๋ณํBufferedReader
: ์ ๋ ฅ์ ๋ฒํผ๋งํ์ฌ ํ ์ค์ฉ ์ฝ์ ์ ์๋๋ก ๋๋ ํด๋์คScanner
๋ณด๋ค ๋น ๋ฅด๊ฒ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ
import java.io.*;
public class Main {
public static void main(String[] args) throw IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// ํ ์ค ์
๋ ฅ๋ฐ๊ธฐ
String input = br.readLine();
System.out.println("์
๋ ฅ ๊ฐ: " + input);
br.close();
}
}
StringBuffer, StringBuilder (๋ฌธ์์ด)
- Java์
String
์ ๋ถ๋ณ(immutable)์ด๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ StringBuffer
์StringBuilder
๋String
๊ณผ ๋ฌ๋ฆฌ ๊ฐ๋ณ(mutable) ๋ฌธ์์ด์ ๋ค๋ฃธStringBuffer
๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ์ง๋ง ๋๋ฆฌ๊ณ ,StringBuilder
๋ ์ฑ๊ธ์ค๋ ๋ ํ๊ฒฝ์์ ๋์ํ๋ฉฐ ๋น ๋ฆ
public class Main {
public static void main(String[] args) {
// StringBuffer ์ฌ์ฉ
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World"); // ๋ฌธ์์ด ์ถ๊ฐ
System.out.println(sb.toString()); // "Hello World"
// StringBuilder ์ฌ์ฉ
StringBuilder sb2 = new StringBuilder("Java");
sb2.append(" Programming");
System.out.println(sb2.toString()); // "Java Programming"
}
}
- StringBuilder ๋ฉ์๋
๋ฉ์๋ | ์ค๋ช | ์์ |
append(String s) |
๋ฌธ์์ด ๋์ ์ถ๊ฐ | sb.append("World"); |
insert(int offset, String s) |
ํน์ ์์น์ ๋ฌธ์์ด ์ฝ์ | sb.insert(5, "Hello"); |
delete(int start, int end) |
ํน์ ๋ฒ์์ ๋ฌธ์ ์ญ์ | sb.delete(0, 5); |
deleteCharAt(int index) |
ํน์ ๋ฒ์๋ฅผ ์๋ก์ด ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ | sb.deleteCharAt(2); |
replace(int start, int end, String s) |
ํน์ ๋ฒ์๋ฅผ ์๋ก์ด ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ | sb.replace(0, 5, "Hi"); |
reverse() |
๋ฌธ์์ด ๋ค์ง๊ธฐ | sb.reverse(); |
length() |
๋ฌธ์์ด ๊ธธ์ด ๋ฐํ | sb.length(); |
charAt(int index) |
ํน์ ์์น ๋ฌธ์ ๋ฐํ | sb.charAt(3); |
setCharAt(int index, char c) |
ํน์ ์์น ๋ฌธ์ ๋ณ๊ฒฝ | sb.setCharAt(0, 'H'); |
substring(int start) |
ํน์ ์์น ๋ฌธ์ ๋ณ๊ฒฝ | sb.substring(3); |
substring(int start, int end) |
ํน์ ์์น ๋ฌธ์ ๋ณ๊ฒฝ | sb.substring(2, 6); |
toString() |
String ๊ฐ์ฒด๋ก ๋ณํ |
sb.toString(); |
capacity() |
ํ์ฌ ์ ์ฅํ ์ ์๋ ๋ฌธ์ ์ ๋ฐํ | sb.capacity(); |
ensureCapacity(int minimumCapacity) |
์ต์ ์ ์ฅ ๊ณต๊ฐ ๋ณด์ฅ | sb.ensureCapacity(50); |
StringTokenizer (๋ฌธ์์ด ๋ถํ )
- ๋ฌธ์์ด์ ํน์ ๊ตฌ๋ถ์(Delimiter) ๊ธฐ์ค์ผ๋ก ๋๋ ๋ ์ฌ์ฉ
- ๊ณต๋ฐฑ, ์ผํ(,), ํญ, ์ค๋ฐ๊ฟ ๋ฑ์ผ๋ก ๋ฌธ์์ด์ ํ ํฐํํ ๋ ์ ์ฉ
import java.util.*;
public class Main {
public static void main(String[] args) {
String data = "Apple,Banana,Cherry";
StringTokenizer st = new StringTokenizer(data, ",");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
๋ฉ์๋ ์์๋ณด๊ธฐ
๋ฐฐ์ด ๊ด๋ จ ๋ฉ์๋
import java.util.*;
int[] arr = {5, 3, 8, 1, 2};
// 1. ๋ฐฐ์ด ์ ๋ ฌ ๋ฐ ์ถ๋ ฅ
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 5, 8]
Integer[] arrI = {5, 3, 8, 1, 2}; // ๊ธฐ๋ณธํ int[]๋ reverseOrder() ์ฌ์ฉ ๋ถ๊ฐ
Arrays.sort(arrI, Collections.reverseOrder());
System.out.println(Arrays.toString(arrI)); // [8, 5, 3, 2, 1]
// 2. 2์ฐจ์ ๋ฐฐ์ด ์ถ๋ ฅ
int[][] arr2D = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(arr2D)); // [[1, 2], [3, 4]]
// 3. ๋ฐฐ์ด ๋ณต์ฌ
int[] newArr = Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(newArr)); // [1, 2, 3]
int[] newArr2 = Arrays.copyOfRange(arr, 1, 4);
System.out.println(Arrays.toString(newArr2)); // [2, 3, 4] (index 1~3)
// 4. ๋ฐฐ์ด ์ฑ์ฐ๊ธฐ
int[] arr7 = new int[5];
Arrays.fill(arr, 7);
System.out.println(Arrays.toString(arr)); // [7, 7, 7, 7, 7]
int[][] arr7_3x3 = new int[3][3];
for (int[] row : arr) {
Arrays.fill(row, 7);
}
System.out.println(Arrays.deepToString(arr)); // [[7, 7, 7], [7, 7, 7], [7, 7, 7]]
// 5. ๋ฐฐ์ด ๋น๊ต
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
System.out.println(Arrays.equals(arr1, arr2)); // true
int[][] arr1_2x2 = {{1, 2}, {3, 4}};
int[][] arr2_2x2 = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepEquals(arr1, arr2)); // true
// 6. ๋ฐฐ์ด์์ ํน์ ๊ฐ ์ฐพ๊ธฐ (์ด์ง ํ์ ๊ธฐ๋ฐ, ์ ๋ ฌ๋์ด ์์ด์ผ ํจ)
int[] arr = {1, 3, 5, 7, 9};
int index = Arrays.binarySearch(arr, 5);
System.out.println(index); // 2 (5๋ 2๋ฒ์งธ ์ธ๋ฑ์ค)
// 7. ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ก ๋ณํ
String[] strArr = {"Java", "Python", "C++"};
List<String> list = Arrays.asList(strArr);
System.out.println(list); // [Java, Python, C++]
// Arrays.asList()๋ก ๋ง๋ ๋ฆฌ์คํธ๋ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ => add(), remove() ๋ถ๊ฐ
// ๋์ new ArrayList<>(Arrays.asList(arr)) ์ฌ์ฉ
List<String> arrList = new ArrayList<>(Arrays.asList(strArr));
arrList.add("JavaScript");
System.out.println(arrList); // [Java, Python, C++, JavaScript]
// 8. ๋ฐฐ์ด ํฉ์น๊ธฐ
int[] arrA = {1, 2, 3};
int[] arrB = {4, 5, 6};
int[] merged = IntStream.concat(Arrays.stream(arrA), Arrays.stream(arrB)).toArray();
System.out.println(Arrays.toString(merged)); // [1, 2, 3, 4, 5, 6]
๋ฌธ์, ๋ฌธ์์ด ๊ด๋ จ ๋ฉ์๋
๋ฌธ์ ๊ด๋ จ (Character ํด๋์ค)
๋ฉ์๋ | ์ค๋ช | ์์ |
Character.isDigit(char c) |
์ซ์์ธ์ง ํ์ธ | Character.isDigit('5') // true |
Character.isLetter(char c) |
๋ฌธ์์ธ์ง ํ์ธ | Character.isLetter('๐') // false (์ํ๊ธฐํธ) |
Character.isLetterOrDigit(char c) |
๋ฌธ์ ๋๋ ์ซ์์ธ์ง ํ์ธ | Character.isLetterOrDigit('A') // true |
Character.isAlphabetic(char c) |
๋ฌธ์์ธ์ง ํ์ธ ( isLetter() ๋ณด๋ค ๋ ๋์ ๋ฒ์) |
Character.isAlphabetic('๐') // true |
Character.isWhitespace(char c) |
๊ณต๋ฐฑ์ธ์ง ํ์ธ | Character.isWhitespace(' ') // true |
Character.toUpperCase(char c) |
๋๋ฌธ์๋ก ๋ณํ | Character.toUpperCase('a') // 'A' |
Character.toLower(char c) |
์๋ฌธ์๋ก ๋ณํ | Character.toLowerCase('A') // 'a' |
๋ฌธ์์ด ๊ด๋ จ (String ํด๋์ค)
- ๋ฌธ์์ด ๊ธธ์ด & ๋ฌธ์ ์ ๊ทผ
๋ฉ์๋ | ์ค๋ช | ์์ |
length() | ๋ฌธ์์ด ๊ธธ์ด ๋ฐํ | "hello".length() // 5 |
charAt(int index) | ํน์ ์์น ๋ฌธ์ ๋ฐํ | "hello".charAt(1) // 'e' |
- ๋ฌธ์์ด ๋ณ๊ฒฝ(์ ๋ฌธ์์ด ๋ฐํ)
๋ฉ์๋ | ์ค๋ช | ์์ |
toUpperCase() |
๋๋ฌธ์๋ก ๋ณํ | "hello".toUpperCase() // "HELLO" |
toLowerCase() |
์๋ฌธ์๋ก ๋ณํ | "hello".toLowerCase() // "hello" |
trim() |
์๋ค ๊ณต๋ฐฑ ์ ๊ฑฐ | " hello ".trim() // "hello" |
replace(char old, char new) |
ํน์ ๋ฌธ์ ๋ณ๊ฒฝ | "java".replace('a', 'o') // "javo" |
replaceAll(String regex, String str) |
์ ๊ท์ ๊ธฐ๋ฐ ์นํ | "abc123".replaceAll("\\d", "*") // "abc***" |
- ๋ฌธ์์ด ๊ฒ์
๋ฉ์๋ | ์ค๋ช | ์์ |
indexOf(String s) |
๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ์์น ๋ฐํ | "hello".indexOf("l") // 2 |
lastIndexOf(String s) |
๋ง์ง๋ง ์์น ๋ฐํ | "hello".lastIndexOf("l") // 3 |
contains(String s) |
๋ฌธ์์ด ํฌํจ ์ฌ๋ถ ํ์ธ | "hello".contains("ll") // true |
startsWith(String s) |
ํน์ ๋ฌธ์๋ก ์์ํ๋์ง ํ์ธ | "hello".startsWith("he") // true |
endsWith(String s) |
ํน์ ๋ฌธ์๋ก ๋๋๋์ง ํ์ธ | "hello".endsWith("o") // true |
- ๋ฌธ์์ด ์๋ฅด๊ธฐ
๋ฉ์๋ | ์ค๋ช | ์์ |
substring(int start) |
ํน์ ์์น๋ถํฐ ๋๊น์ง ๋ฌธ์์ด ๋ฐํ | "hello".substring(2) // "llo" |
substring(int start, int end) |
ํน์ ๋ฒ์ ๋ฌธ์์ด ๋ฐํ | "hello".substring(1, 4) // "ell" |
- ๋ฌธ์์ด ๋ถํ
๋ฉ์๋ | ์ค๋ช | ์์ |
split(String str) |
๋ฌธ์์ด์ ๋ฐฐ์ด๋ก ๋ถํ | "a,b,c".split(",") // ["a", "b", "c"] |
split(String str, int limit) |
ํน์ ๊ฐ์๋งํผ ๋ถํ | "a,b,c".split(",", 2) // ["a", "b,c"] |
- ๋ฌธ์์ด ๋น๊ต
๋ฉ์๋ | ์ค๋ช | ์์ |
equals(String s) |
๋ฌธ์์ด์ด ๊ฐ์์ง ๋น๊ต | "hello".equals("hello") // true |
equalsIgnoreCase(String s) |
๋์๋ฌธ์ ๋ฌด์ํ๊ณ ๋น๊ต | "hello".equalsIgnoreCase("HELLO") // true |
compareTo(String s) |
์ฌ์ ์ ๋น๊ต (๊ฐ์ผ๋ฉด 0) | "apple".compareTo("banana") // -1 |
์ ๋ ฌ ๊ด๋ จ
lambda๋ฅผ ํ์ฉํ ์ ๋ ฌ
// ๋ฐฐ์ด
Integer[] arr = {1, 2, 3, 4, 5};
Arrays.sort(arr, (a, b) -> b - a); // ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(arr, (a, b) -> a - b); // ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
// Map
Map<String, Integer> map = new HashMap<>();
map.put("a", 3);
map.put("b", 2);
map.put("c", 1);
List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet()); // [("a", 3), ("b", 2), ("c", 1)]
entryList.sort((o1, o2) -> map.get(o1.getKey()) - map.get(o2.getKey())); // ๊ฐ ๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌ -> [("c", 1), ("b", 2), ("a", 3)]
// ์ ์ฝ๋ ๋์ comparingInt ์ฌ์ฉ๋ ๊ฐ๋ฅ
entryList.sort(Comparator.comparingInt((Map.Entry<String, Integer> o) -> map.get(o.getKey())));
Comparator๋ฅผ ํ์ฉํ ์ฌ์ฉ์ ์ ์ ์ ๋ ฌ
class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
}
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", 85));
students.add(new Student("Bob", 90));
students.add(new Student("Charlie", 80));
// ์ ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
students.sort(Comparator.comparingInt(s -> s.score));
for (Student s : students) {
System.out.println(s.name + ": " + s.score);
}
// ์ถ๋ ฅ: Charlie: 80, Alice: 85, Bob: 90
์ฌ๋ฌ ์กฐ๊ฑด์ผ๋ก ์ ๋ ฌํ๋ ค๋ฉด thenComparing()
์ฌ์ฉ
students.sort(Comparator.comparingInt((Student s) -> s.score).thenComparing(s -> s.name));
์์
n x m ๋ฐฐ์ด ์ ๋ ฅ๋ฐ์ ์ถ๋ ฅํ๊ธฐ
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][m];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
sb.append(arr[i][j] + " ");
}
sb.append('\n');
}
System.out.println(sb);
}
}