#3. Java - 1 κΈ°μ΄λ¬Έλ²
# IntelliJ
introduce value, reformat file, line duplicate, line delete
javadocs plugins
# λͺ¨λ μλ°, Java 8~
2014λ , Java8 (1.8)μ΄ λμ€κΈ° μ κΉμ§λ μλ°λ μ λ°μ΄νΈλ₯Ό μμ£Όνμ§ μμλ€. νλλΌλ ν¬κ² μλ‘μ΄ κ°λ λ μμλ€. νμ§λ§ Java 8 μμ μλμ κ°μ λͺ¨λν μΈμ΄λ€μ κΈ°λ₯λ€μ΄ λ§μ΄ μΆκ°λμλλ° μ΄ κΈ°μ μ μμμΌλ‘ 맀λ 3μ, 9μλ§λ€ κΎΈμ€ν μ λ°μ΄νΈλ₯Ό ν΄μ£Όκ³ μλ€.
- λλ€ ννμ
- λ©μλ λ νΌλ°μ€
- μ€νΈλ¦Ό API
- Optional
μ§κΈ νμ μμ μ¬μ©νλ λͺ¨λ μλ°λ Java 8μμ λμ¨ μλ‘μ΄ κ°λ μ ν¬ν¨νμ¬ μ¬μ©νκ³ μλ€. μ°Έκ³ λ‘ μ§κΈ κ°μ₯ λ§μ΄ μ¬μ©νλ LTS(Long-Term-Service)λ²μ μ Java11μ΄κ³ νμ¬ Java17λ²μ μ LTSλ‘ μ λ°μ΄νΈ ν μμ μ΄λΌκ³ νλ€.
ν΄λΉ κΈμμλ μλ°μ κΈ°λ³ΈκΈ°λ₯Ό λ€λ£¨κ³ , λͺ¨λ Javaμ κΈ°λ₯λ€μ λ€μ κΈμ λ°λ‘ λ€λ£¨κ² λ€.
# Hello World
μλ°μμλ λͺ¨λ κ²μ΄ ν΄λμ€μ΄λ€. νλμ μλ° Appμμλ μ΅μ νλμ Main Method κ° νμνλ€.
μ°Έκ³ λ‘ λμ€μ λ°°μΈ μ€νλ§ νλ μμν¬ λ±μμλ Main Method κ° μμμ§μ μ΄ μλλ° μ΄λ λμ€μ λ°°μ°λλ‘ νμ.
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
System.out.println("μλ
νμΈμ");
}
}
μ°Έκ³ λ‘ μλ° κΈ°λ³Έ ν¨ν€μ§ (java.lang)λ κΈ°λ³ΈμΌλ‘ import λλ€. κ·Έλμ String, System κ³Ό κ°μ ν΄λμ€λ€μ λ°λ‘ import λ¬Έμ μ μ§ μμλ λ°λ‘ μ¬μ© ν μ μλ€.
# λ°μ΄ν° νμ
# κΈ°λ³Έ μλ£ν(Primitive)
λ³μ μ΄λ¦ μ§λ λ°©λ²μ μλ° λ€μ΄λ° 컨벀μ μ νλ² μ°Έκ³ νμ. μλ£ν λ©λͺ¨λ¦¬ν¬κΈ° νν κ°λ₯ λ²μλ λ€μκ³Ό κ°λ€. μ°Έκ³ λ‘ λͺ¨λ μ΄μ체μ μ λμΌνκ² μ μ©λλ€.
μλ£ν | ν¬κΈ° (κ³ μ ) | λ²μ |
byte | 1 Byte | -128 ~ 127 |
short | 2 Byte | -32,768 ~ 32,767 |
int | 4 Byte | μ μ (-2,147,483,648 ~ 2,147,483,647 ) |
long | 8 Byte | ν° μ μ (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) |
char | 2 Byte | μ λμ½λ (#u0000~ #uFFFF) |
float | 4 Byte | μ€μ (1.4E-45 ~ 3.4028235E38) |
double | 8 Byte | μ€μ (4.9E-324 ~ 1.7976931348623157E308) |
boolean | 1 Byte | λ Όλ¦¬ (true, false) |
μ°Έκ³ λ‘ float κ³Ό doubleμ λΆλμμμ λ°©μμ΄λΌ 0μ μ ννκ² νννμ§ λͺ»νλ€λκ±Έ κΈ°μ΅νμ.
float | 4 Byte | λΆνΈ(1bit) + μ§μ(8bit) + κ°μ(23bit) = 32 bit = 4 Byte |
double | 8 Byte | λΆνΈ(1bit) + μ§μ(11bit) + κ°μ(52bit) = 64 bit = 8 Byte |
// λ³μμ μ΄λ¦μ μλ―Έλ₯Ό λͺ
ννκ² μ§μ.
int accountDoumentCount = 10;
int humonResourceDoumentCount = 20;
for (int i = 0; i < 10; i++){
// λ¬Όλ‘ μ κΉ μ¬μ©νλ μ§μλ³μ(i,j,k)κΉμ§ μλ―Έλ₯Ό λΆμ¬ ν νμλ μλ€.
}
#μμμ 리ν°λ(literal)
μμμ 리ν°λμ ν·κ°λ¦΄ μ μλλ°, μμλ 'μ΄κΈ°ν μ΄ν κ°μ΄ λ³νμ§ μλ μ' μ΄λ€. λ³μλ₯Ό μ μΈ ν λ final ν€μλλ₯Ό μ΄μ©ν΄ μμλ‘ λ§λ€ μ μλ€.
final int DAY_OF_WEEK = 7; // μ°Έκ³ ) κ°λ₯νλ©΄ μμκ°μ get λ©μλλ‘ μ 곡νλκ² μ’μ΅λλ€.
리ν°λμ λ§ κ·Έλλ‘ μ μΈμμ΄ λ°λ‘ μ¬μ©ν μ μλ, λ¬Έμ κ·Έλλ‘μ(=리ν°λν) μμλ₯Ό μλ―Ένλ€. immediate value λΌκ³ νκΈ°λ νλ€.
3
"HEllO"
3.213
'H'
λ³μλ‘ μ μΈνμ§ μκ³ λ°λ‘ μμλ‘ μ¬μ©νλ κ°λ€λ κ³ μ μ λ°μ΄ν° νμ μ κ°μ§λ€.
μ°Έκ³ λ‘ λ¦¬ν°λ λ€μ (L, F, D)κ°μ ν€μλλ₯Ό λΆμ¬ λͺ μμ μΌλ‘ ν΄λΉ 리ν°λμ νμ μ μ§μ ν΄μ€ μ μλ€.
object.setNumber(3) // 리ν°λ '3'μ μλ£νμ intμ΄λ€.
object.setName("Hello") // 리ν°λ "Hello"μ ν΄λμ€λ Stringμ΄λ€.
object.setNumber(3.0) // 리ν°λ '3.0'μ μλ£νμ int..? float..? double..?
object.setNumber(3.0F) // μ΄λ κ² λͺ
μμ μΌλ‘ Floatν μ΄λΌκ³ μ ν΄ μ€ μ μλ€.
int a = 1 // μμμ μ΄ μμΌλ©΄ intν 리ν°λμ΄λ€. λ°λ‘ 리ν°λ νμλ₯Ό νμ§ μμλ λλ€.
boolean b = true // booleanμ κ°μ΄ true, false 2κ°λ°μ μμ΄ λ°λ‘ 리ν°λ νμλ₯Ό μν΄λ λλ€.
// μ€μ 리ν°λμ μ¬μ©ν λλ λ°λμ λͺ
μμ μΌλ‘ νμν΄μ£Όμ.
long count = 10000L;
float f1 = 2.3F;
double d1 = 5.6D;
# μ°Έμ‘°ν(Reference)
ν΄λμ€λ₯Ό μ μνκ³ new ν€μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ± ν μ μλ€.
μλ°μμλ κΈ°λ³Έ μλ£νμ μ μΈν λͺ¨λ κ²μ μ°Έμ‘°νμΌλ‘ μ¬μ©νλ€. μ½κ²λ§ν΄ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°μ§κ³ μμ§ μκ³ , μ¬λ³Ό(=μ΄λ¦)λ§ κ°μ§κ³ μλ€ μ€ννλ μμ μ λ©λͺ¨λ¦¬μ μ κ·Όνλ€λ λ§.
//ν΄λμ€μ΄λ¦ λ νΌλ°μ€λͺ
= new ν΄λμ€μ΄λ¦();
MadPlay instance = new MadPlay();
# String ν΄λμ€
μλ°μμλ λ¬Έμμ΄μ΄ ν΄λμ€λ‘ μ 곡λμ΄μ§λ€. νμ§λ§ Stringμ κ²½μ° μμΈμ μΌλ‘ κΈ°λ³Έμλ£ν μ²λΌ new ν€μλ μμ΄ μμ±ν μ λ μλλ°, μ΄λ₯Ό λ¬Έμμ΄ λ¦¬ν°λ μμ± λ°©μμ΄λΌκ³ νκ³ new ν€μλλ₯Ό μ¬μ©ν κ²κ³Ό λ©λͺ¨λ¦¬μ μ μ¬ μ₯μκ° λ¬λΌμ§λ€.
// λ€λ₯Έ κ°μ²΄μ λ§μ°¬κ°μ§λ‘ Heap μμμ ν λΉλλ€.
String str1 = new String("madplay");
// μ€νΈλ§ μμκ°μΌλ‘ κ΄λ¦¬λλ€. String Constant Pool μ΄λΌλ μμμ μ μ₯λλ€.
String str2 = "madplay";
String str3 = "madplay"; // κΈ°μ‘΄ "madplay" μμ μ¬νμ©. str 2μ΄λ κ°μ λ©λͺ¨λ¦¬ μ°Έμ‘°
String str4 = new String("madplay"); // μλ‘μ΄ κ°μ²΄λ₯Ό μμ±. str1μ΄λ λ€λ₯Έ λ©λͺ¨λ¦¬ μ°Έμ‘°
μ°Έκ³ λ‘ String Constant Poolμ κΈ°μ‘΄μλ μμκ° μ μ© λ©λͺ¨λ¦¬μ (Perm μμ) λ°λ‘ μ μ₯λμ΄μ‘λλ°, λ°νμμ€ λ©λͺ¨λ¦¬ μ¦κ°λ‘ μΈν OutOfMemory μμΈλ₯Ό λ°μμν¬ μ μμ΄ Java6 μ΄νλ‘λ κ°μ²΄μ ν¨κ» Heap λ©λͺ¨λ¦¬μμμμ κ΄λ¦¬νκ³ μλ€.
# == κ³Ό equal
Stringμ κ°μ΄ μλ κ°μ²΄μ΄λ€. κ°μ²΄μ μμ΄ (==) μ°μ°μ κ°μ΄ μλ μ£Όμκ°μ λΉκ΅νλ μ°μ°μ΄λ€.
λ§μ½ λ¬Έμμ΄ λ¦¬ν°λλ‘ μ μΈνλ€λ©΄ κ°μ μμ κ° μ£Όμλ₯Ό κ°λ₯΄ν€κΈ°μ κ°μ λΉκ΅ν μ μμ§λ§, κ°μ²΄ (new String)λ‘ λ§λ€μλ€λ©΄ μ μ μλνμ§ μλλ€. μ΄ κ²½μ° String κ°μ²΄ λ©μλ equalμ μ΄μ©νμ¬ λ¬Έμμ΄ κ°μ λΉκ΅νλ€.
public class MadPlay {
public static void main(String[] args) {
String someLiteral = "kimtaeng";
String someObject = new String("kimtaeng");
System.out.println(someLiteral.equals(someObject)); // print 'true'
System.out.println(someLiteral == someObject); // print 'false'
System.out.println("kimtaeng" == someLiteral); // print 'true'
System.out.println("kimtaeng" == someObject); // print 'false'
}
}
# Arrayμ java.util.ArrayList
μλ°μλ κΈ°λ³Έ λ°°μ΄ κ°μ²΄ (Array)κ° μ‘΄μ¬νλ, λλΆλΆμ κ²½μ° Collection Frameworkμ μλ (ArrayList)λ₯Ό μ¬μ©νλ€. λ¬Όλ‘ μ μ¬μ©νμ§λ μλλΌλ λ°°μ΄μ μ΄λ»κ² μ¬μ©νλμ§ μ λλ μμλμ.
// μλ 3μ½λμ λμμ λμΌνλ€.
String[] myStringArray = new String[3]; // { "", "", "" } λΉ μ€νΈλ§ μμ±
String[] myStringArray = new String[]{"a", "b", "c"}; // μ€νΈλ§ μ΄κΈ°ν
String[] myStringArray = {"a", "b", "c"}; // μλ°μμ μ 곡νλ μ΄κΈ°ν κΈ°λ₯.
// = { "a" ... } λΌκ³ μ μλ€κ³ ν΄μ {} λΆλΆμ΄ μμ, 리ν°λμΈκ±΄ μλλ€. μλ°μμ μ 곡νλ νΈμκΈ°λ₯μΌ λΏ.
String[] myStrings;
myStrings = {"a", "b", "c"}; // μ»΄νμΌ μλ¬! λΆκ°λ₯ν μ½λ.
// μ΄ 2κ°λ κ°μ μ½λμ΄λ€. λ€λ§ νμ
μ κ΅¬λΆ μ§λ int[] a1 κ° μΌλ°μ μ΄λ€.
int[] a1; int a2[];
int[] intArr = {1,2,3};
int[] doubleArr = new double[4];
String[] objArr = new String[5]; //object type
int[] myIntArray = new int[3]; // {0,0,0}μ΄ ν λΉλλ€.
int[] myIntArray = {1, 2, 3}; // μλμ κ°μ μ½λμ΄λ€. μλ°μ μ΄κΈ°ν νΈμκΈ°λ₯.
int[] myIntArray = new int[]{1, 2, 3}; // new int[]λ‘ νμ
μ λͺ
ννκ² λνλ΄μ£Όμλ€.
// ν΄λΉ μ½λλ μ»΄νμΌ μλ¬λ₯Ό λ°μμν¨λ€. μμ±ν λ©λͺ¨λ¦¬ ν¬κΈ°λ₯Ό μ μ μλ€.
int badArray[] = new int[];
// ν΄λΉ μ½λλ μ»΄νμΌ μλ¬λ₯Ό λ°μμν¨λ€.
// μμ μ νμλ new int[]λ μλ£νμ μ§μ ν κ²μ΄μ§, κ°μ²΄μ ν¬κΈ°λ₯Ό μ λ κ³³μ΄ μλλ€.
int badArray[] = new int[3] {1, 2, 3} ;
// Since Java 8. Doc of IntStream: https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html
int [] myIntArray = IntStream.range(0, 100).toArray(); // From 0 to 99
int [] myIntArray = IntStream.rangeClosed(0, 100).toArray(); // From 0 to 100
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).toArray(); // The order is preserved(보쑴).
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).sorted().toArray(); // Sort
// Arrayλ κ°μ²΄μ΄κΈ°μ λ΄λΆ λ©μλκ° μ‘΄μ¬νλ€.
int arr[] = new int[3];
for (int i = 0; i < arr.length; i++) { ... } // length λ‘ μ κ·Ό
for (int a : arr) { ... } // iterλ‘ μ κ·Ό
λμ€μ 컬λ μ κ³Ό μλ° API ν΄λμ€λ₯Ό λ€μ λ€λ£¨κ² μ§λ§, 컬λ μ νλ μμν¬μ μλ ArrayListλ λ€μκ³Ό κ°μ΄ μ¬μ©νλ€.
μ°Έκ³ λ‘ java.util μμλ Arrays, Calendar, Date, StringTokenizer, Random λ± λ§μ ν΄λμ€λ€μ΄ μ‘΄μ¬νλ€.
import java.util.ArrayList; // ArrayListλ₯Ό Importν΄μ¨λ€.
public class Main {
public static void main(String[] args) {
ArrayList<Integer> integers1 = new ArrayList<Integer>(); // νμ
μ§μ
ArrayList<Integer> integers2 = new ArrayList<>(); // νμ
μλ΅ κ°λ₯
ArrayList<Integer> integers3 = new ArrayList<>(10); // μ΄κΈ° μ©λ(Capacity) μ€μ
ArrayList<Integer> integers4 = new ArrayList<>(integers1); // λ€λ₯Έ Collectionκ°μΌλ‘ μ΄κΈ°ν
// Arrays.asListλ₯Ό ν΅ν΄ μμκ°μ μ΄μ©ν μ΄κΈ°ν
// Arraysλ java.utilμ μλ μλ° API κ°μ²΄μ΄λ©° λ°°μ΄μ μ½κ² μ‘°μνκΈ° μν λ©μλλ€μ΄ ν¬ν¨λμ΄μλ€.
ArrayList<Integer> integers5 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
// ArrayList -> Array
String[] array = arrayList.toArray(new String[arrayList.size()]);
// Array -> ArrayList, λ¬Όλ‘ κ·Έλ₯ for λ
Έκ°λ€λ‘ λ³νν΄λ λλ€.
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(array));
// ArrayListλ μ±λ₯μ΄ μ΅μ νλμ΄μκ³ , λ€μν κΈ°λ₯μ μ 곡νλ€.
ArrayList<String> colors = new ArrayList<>();
// add() method
colors.add("Black");
colors.add("White");
colors.add(0, "0λ²μ½μ
");
colors.add(2, "2λ²μ½μ
");
colors.add("Red");
// set() method
colors.set(3, "Blue");
// [0λ²μ½μ
, Black, 2λ²μ½μ
, Blue, Red]
System.out.println(colors);
}
}
# 쑰건 (if)
if - if else - else
λ Όλ¦¬μ°μ°μ ν λλ λ€λ₯ΈμΈμ΄μ λ§μ°¬κ°μ§λ‘ μ΄λ―Έ λ΅μ΄ κ²°μ λ¬μΌλ©΄ λμ΄μ 쑰건μ νκ°νμ§ μλλ€. μλ°μμλ ifλ¬Έμμ boolean νμ μ΄ μλ λ€λ₯Ένμ μ μ»΄νμΌ λμ§ μλλ€.
public class Hello {
public static void main(String[] args) {
System.out.println("start");
// isDone() μ μ€νλμ§ μλλ€. μ΄λ―Έ μμμ falseλ‘ λ΅μ΄ κ²°μ λ¬κΈ° λλ¬Έ.
if (isNagive() && isDone()){
System.out.println("it doesn't print(false)");
}
// :: start
// :: IsNagive
}
public static boolean isDone(){
System.out.println("IsDone");
return true;
}
public static boolean isNagive(){
System.out.println("IsNagive");
return false;
}
}
# 쑰건(switch)
break; κ° μμΌλ©΄ μλ μ½λλ μ€νλ¨μ μ μνμ. μλ°λ 쑰건μΌλ‘ String μ μ§μνλ€.
package Hello;
public class Hello {
public static void main(String[] args) {
int month = 8;
String monthString = "1μ";
switch (monthString) {
case "1μ":
monthString = "January";
break;
case "2μ":
monthString = "February";
break;
default:
monthString = "May";
break;
}
System.out.println(monthString);
}
}
2020λ Java14 λΆν° Switchλ¬Έμ κ°μ λ λ¬Έλ²μ μ§μνλ€. ν¨μν νλ‘κ·Έλλ°μ ν¨ν΄λ§€μΉμ²λΌ, break μμ΄ κ°κ²°νκ² μ¬μ©ν μ μλ€.
public class Hello {
public static void main(String[] args) {
// 2020λ
java14λΆν° μ§μνλ κΈ°λ₯μ΄λΌ μμ§ μ μ°μ΄μ§λ μλλ€.
String monthString = "1μ";
monthString = switch (monthString) {
case "1μ" -> "January";
case "2μ" -> "February";
case "3μ" -> "March";
case "4μ","5μ" -> "4,5μ";
default -> "May";
};
// μ΄κ±°νμ μ¬μ©νλ©΄ default μμ΄ switchλ¬Έμ μμ νκ² μ¬μ© ν μ μλ€.
enum Month { January, February, March, April }
Month value = Month.January;
monthString = switch (value) {
case January -> "January";
case February -> "February";
case March -> "March";
case April -> "4,5μ";
};
System.out.println(monthString);
}
}
# λ°λ³΅λ¬Έ (for, while, for-each)
νΉλ³ν μ μ μλ€. continueμ breakλ₯Ό μ§μνλ©° for-eachλ μ΄ν°λ μ΄ν°μ²λΌ μννλ€.
String[] numbers = {"one", "two", "three"};
// κ³ μ μ μΈ forλ¬Έ
for(int i=0; i<numbers.length; i++) {
System.out.println(numbers[i]);
}
// μμ κ°μ μ½λμ΄λ€.
for(String number: numbers) {
System.out.println(number);
}