๐Java(2)
๐์๋ฌ์ ์์ธ
์ด๋ค ์์ธ์ ์ํด ์ค๋์ํ๊ฑฐ๋ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ
Error
ํ๋ก๊ทธ๋จ์ ์๋ชป ์์ฑํ ๊ฒฝ์ฐ
Exception
- Checked Exception: ์์ธ์ ๋ํ ๋์ฒ์ฝ๋ ์ ๋ฌด๋ฅผ ํ์ธ(์์ธ์ ๋ํ ๋์ฒ์ฝ๋๊ฐ ์๋ค๋ฉด ์ปดํ์ผ์ ์งํํ์ง ์๋๋ค, ๋์ฒ์ฝ๋ O)
- Unchecked Exception: ์์ธ์ ๋ํ ๋์ฒ์ฝ๋ ์ ๋ฌด๋ฅผ ํ์ธ(์์ธ์ ๋ํ ๋์ฒ์ฝ๋๊ฐ ์์ด๋ ์ปดํ์ผ์ ์งํํ๋ค. ๋ฐํ์ ์ค๋ฅ, ๋์ฒ์ฝ๋ X)
โ๏ธtry~catch ๊ตฌ๋ฌธ
try{
}
catch(XXException c){ //๋์ง ์์ธ๋ฅผ ๋ฐ์
//์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์ฒ๋ฆฌํ ์ฝ๋
}
public class SimpleException {
public static void main(String[] args) {
//java.lang.ArrayIndexOutOfBoundsException : unchecked exception
int[] intArray = { 10 };
try {
System.out.println(intArray[2]);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("์์ธ ์ฒ๋ฆฌ ์๋ฃ");
}
System.out.println("ํ๋ก๊ทธ๋จ ์ข
๋ฃํฉ๋๋ค.");
}
}
Exception ๊ฐ์ฒด์ ์ ๋ณด ํ์ฉ
Throwable์ ์ฃผ์ ๋ฉ์๋
- getMessage(): ๋ฐ์ํ ์์ธ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๋ฉ์์ง ๋ฐํ
- getCause(): ์์ธ์ ์์ธ์ด ๋๋ Throwable ๊ฐ์ฒด ๋๋ null ๋ฐํ
- printStackTrace(): ์์ธ๊ฐ ๋ฐ์๋ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ๊น์ง์ ๋ฉ์๋ ํธ์ถ์คํ ์ถ๋ ฅ, ๋๋ฒ๊น ์ ์๋จ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ๋จ
Q. catch์์ ์๋ฌด๊ฒ๋ ๊ธฐ๋กํ์ง ์์ผ๋ฉด?
์ค๋ฅ์ ๋ฐ์ ์ฌ๋ถ๋ฅผ ์ ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ๊ทธ ์ ๋ณด๋ฅผ ์ ์ถ๋ ฅํด์ผ ํ๋ค.
try~catch๋ฌธ์์์ ํ๋ฆ
- try ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด
- JVM์ด ํด๋น Exception ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑ ํ์ ๋์ง๋ค.(Throw)
- throw new XXException()
- ๋์ ธ์ง exception์ ์ฒ๋ฆฌํ ์ ์๋ catch ๋ธ๋ก์์ ๋ฐ์ ํ ์ฒ๋ฆฌ
- ์ ๋นํ catch ๋ธ๋ก์ ๋ง๋์ง ๋ชปํ๋ฉด ์์ธ์ฒ๋ฆฌ๋ ์คํจ
- ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด try~catch๋ธ๋ก์ ๋ฒ์ด๋ ๋ค์ ๋ฌธ์ฅ ์คํ
- JVM์ด ํด๋น Exception ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑ ํ์ ๋์ง๋ค.(Throw)
- try ๋ธ๋ก์์ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด
- catch ๋ฌธ์ ๊ฑฐ์น์ง ์๊ณ try~catch ๋ธ๋ก์ ๋ค์ ํ๋ฆ ๋ฌธ์ฅ์ ์คํ
Q.
int num = new Random().nextInt(2);
try{
System.out.println("code 1, num: "+num);
int i = 1/num;
System.out.println("code 2, ์์ธ ์์");
}catch(ArithmeticException e){
System.out.println("code 3, ์์ธ ์ฒ๋ฆฌ ์๋ฃ");
}
System.out.println("code 4");
num=0์ผ ๋,
code 1, num: 1
code 3, ์์ธ ์ฒ๋ฆฌ ์๋ฃ
code 4
num=1์ผ ๋
code 1, num: 1
code 2, ์์ธ ์์
code 4
โ๏ธUnchecked Exception๊ณผ Checked Exception
Exception ์ค๋ช ์ข ๋ฅ
ArrayIndexOutOfBoundsException | ๋ฐฐ์ด์ ์ ๊ทผ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ | UnCheckedException |
NegativeArraySizeException | ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์์๋ก ์ง์ ํ ๊ฒฝ์ฐ | UnCheckedException |
NullPointerException | ๊ฐ์ฒด๋ฅผ ์ ์ธ๋ง ํ๊ณ ์์ฑํ์ง ์์ ์ํ์์ ์ ๊ทผํ ๊ฒฝ์ฐ | UnCheckedException |
ClassCastException | Reference ํ์ ์ ์๋ชป๋ ํ๋ณํ์ ๋ฐ์ | UnCheckedException |
NumberFormatException | ๋ฌธ์์ด๋ก๋ ๋ฐ์ดํฐ๋ฅผ Primitive๋ก ๋ณํ์ ์๋ชป ๋ณ๊ฒฝํ๋ฉด ๋ฐ์ | UnCheckedException |
IndexOutOfBoundsException | List์์ ์๋ชป๋ index์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ | UnCheckedException |
ArithmeticException | 0์ผ๋ก ๋๋ ๊ฒฝ์ฐ | UnCheckedException |
IllegalArgumentException | ๋ฉ์๋์ ์๋ชป๋ ์ธ์๋ฅผ ์ ๋ฌํ ๊ฒฝ์ฐ | UnCheckedException |
InterruptedException | ์ฐ๋ ๋ ์ํ์ค ์ค๋จ ๋ช ๋ ค์ ๋ฐ๋ฅธ ์ค๋ฅ | UnCheckedException |
FileNotFoundException | ์ง์ ํ ๊ฒฝ๋ก์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ | CheckedException |
IOException | ๋ฐ์ดํฐ๋ฅผ IOํ๋ ์ค ๋ฐ์ํ๋ ์ค๋ฅ | CheckedException |
SQLException | DB์๋ฒ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค ๋ฐ์ํ๋ ์ค๋ฅ | CheckedException |
Unchecked Exception
public class UncheckedTest{
public static void main(String[] args){
int[] list = {1,2,3,4,5};
System.out.println(list[0]);
}
}
๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์๋ฌ ์ฒดํฌ๋ฅผ ๊ฐ์ ํด์ผ ํ๋ค๋ฉด(ArrayIndexOutOfBoundsException ๋ฑ) try~catch๋ฌธ์ ๋ฐ๋์ ์ฌ์ฉํด์ผ ํ์ ๊ฒ์ด๋ค.
Checked Exception
์์ธ์ ๋ํ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ
public class CheckedExceptionHandling {
public static void main(String[] args) {
// TODO: ๋ค์์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํด๋ณด์.
try {
Class.forName("abc.Def");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
// END
System.out.println("ํ๋ก๊ทธ๋จ ์ ์ ์ข
๋ฃ");
}
}
์ฆ, Checked exception๊ณผ Unchecked exception์ ์ฐจ์ด๋ ์์ธ ๋ฐ์ ์ฌ๋ถ๊ฐ ์๋๋ผ ์์ธ ๋ฐ์์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?์ด๋ค.
checked→๋์ฒ์ฝ๋๊ฐ ์์ผ๋ฉด ์ปดํ์ผ ์งํX, unchecked→๋์ฒ์ฝ๋๊ฐ ์์ด๋ ์ปดํ์ผ ์งํ
โ๏ธ๋ค์ค exception handling
- try ๋ธ๋ก์์ ์ฌ๋ฌ ์ข ๋ฅ์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ
- ํ๋์ try ๋ธ๋ก์ ์ฌ๋ฌ ๊ฐ์ catch ๋ธ๋ก ์ถ๊ฐ ๊ฐ๋ฅ
- ์์ธ ์ข ๋ฅ๋ณ๋ก catch ๋ธ๋ก ๊ตฌ์ฑ
try{
}catch(XXException e){
//XXException ๋ฐ์์ ์ฒ๋ฆฌ ์ฝ๋
}catch(XXException e){
//XXException ๋ฐ์์ ์ฒ๋ฆฌ ์ฝ๋
}catch(XXException e){
//XXException ๋ฐ์์ ์ฒ๋ฆฌ ์ฝ๋
}
- ๋ค์ค catch ๋ฌธ์ฅ ์์ฑ ์์ ์ ์ ์ฌํญ
- JVM์ด ๋์ง ์์ธ๋ catch๋ฌธ์ฅ์ ์ฐพ์ ๋๋ ๋คํ์ฑ์ด ์ ์ฉ๋๋ค
- ์์ ํ์ ์ ์์ธ๊ฐ ๋จผ์ ์คํ๋๋ ๊ฒฝ์ฐ ๋ค์ ๋ฑ์ฅํ๋ catch ๋ธ๋ก์ ๋์ํ ๊ธฐํ๊ฐ ์๋ค
- ์์ ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ฌด๊ด
- ์์ ๊ด๊ณ์์๋ ์์ ๋ฒ์(์์)์์ ํฐ ๋ฒ์(์กฐ์)์์ผ๋ก ์ ์
๋ค์ค ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ด์ฉํ checked exception ์ฒ๋ฆฌ
- ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ๋ถ๊ฐ: Checked Exception⇒์ปดํ์ผ์กฐ์ฐจ ์ด๋ฃจ์ด์ง์ง ์๋๋ค.(checked exception์ด๋ฏ๋ก)
public static void main(String[] args){
Class.forName("abc.Def"); // ClassNotFoundException
new FileInputStream("Hello.java"); // FileNotFoundException
DriverManager.getConnection("Hello"); // SQLException
}
- ์์ธ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ ๊ตฌ์ฒด์ ์ผ๋ก ์งํํ๋ค.
public class MultiExceptionHandling {
@SuppressWarnings("resource")
public static void main(String[] args) {
// TODO: ๋ค์์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํด๋ณด์.
try {
Class.forName("abc.Def"); // ClassNotFoundException
new FileInputStream("Hello.java"); // FileNotFoundException
DriverManager.getConnection("Hello"); // SQLException
}catch(ClassNotFoundException e) {
System.out.printf("ํด๋์ค๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: %s\n", e.getMessage());;
}catch(FileNotFoundException e) {
System.out.printf("ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค: %s\n", e.getMessage());;
}catch(SQLException e) {
System.out.printf("DB ์ ์ ์คํจ: %s\n", e.getMessage());;
}
// END
System.out.println("ํ๋ก๊ทธ๋จ ์ ์ ์ข
๋ฃ");
}
}
- ํ์ง๋ง ์ฌ๊ฐํ์ง ์๋ ์์ธ๋ฅผ ๊ตณ์ด ์ธ๋ถํํด์ ์ฒ๋ฆฌํ๋ ๊ฒ๋ ๋ญ๋น์ด๋ฏ๋ก ‘|’(or)๋ฅผ ์ด์ฉํด ํ๋์ catch ๊ตฌ๋ฌธ์์ ์์๊ด๊ณ๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ์ exception ์ฒ๋ฆฌํ๋ ๊ฒ๋ ์ข๋ค.
public class MultiExceptionHandling {
@SuppressWarnings("resource")
public static void main(String[] args) {
// TODO: ๋ค์์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํด๋ณด์.
try {
Class.forName("abc.Def"); // ClassNotFoundException
new FileInputStream("Hello.java"); // FileNotFoundException
DriverManager.getConnection("Hello"); // SQLException
}catch(ClassNotFoundException | FileNotFoundException e) {
System.out.printf("์์์ ์ฐพ์ ์ ์์ต๋๋ค: %s\n", e.getMessage());;
}catch(SQLException e) {
System.out.printf("DB ์ ์ ์คํจ: %s\n", e.getMessage());;
}
// END
System.out.println("ํ๋ก๊ทธ๋จ ์ ์ ์ข
๋ฃ");
}
}
- ํ์ง๋ง ๊ณ์ธต ๊ด๊ณ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ “์์ ๊ด๊ณ์์๋ ์์ ๋ฒ์(์์)์์ ํฐ ๋ฒ์(์กฐ์)์์ผ๋ก ์ ์”ํด์ผ ํ๋ค.
public class HierachyException {
@SuppressWarnings("resource")
public static void main(String[] args) {
String src = "./.project";
// TODO: ์์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ์ฌ ๋ค์์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด๋ณด์.
try {
FileInputStream input = new FileInputStream(src);
int readData = -1;
while ((readData = input.read()) != -1) {
System.out.print((char) readData);
}
}catch(FileNotFoundException e) {
System.out.printf("์ฝ์ผ๋ ค๋ ํ์ผ์ด ์์ต๋๋ค.: %s\n", e.getMessage());
}catch(IOException e) {
System.out.printf("ํ์ผ ์ฝ๊ธฐ์ ์คํจํ์ต๋๋ค.: %s\n", e.getMessage());;
}
// END
System.out.println("ํ์ผ ์ฝ์ ์๋ฃ!");
}
}
โ๏ธtry ~ catch ~ finally
finally๋ ์์ธ ๋ฐ์ ์ฌ๋ถ์ ์๊ด ์์ด ์ธ์ ๋ ์คํ
- ์ค๊ฐ์ return์ ๋ง๋๋ ๊ฒฝ์ฐ๋ finally ๋ธ๋ก์ ๋จผ์ ์ํ ํ ๋ฆฌํด ์คํ
public class tryCatchFinallyTest{
public static void main(String[] args){
int num = new Random().nextInt(2);
try{
System.out.println("1");
int i = 1/num;
System.out.println("2");
}catch(ArithmeticException e){
System.out.println("3");
}finally{
System.out.println("4");
}
}
System.out.println("5");
}
//num=0์ผ ๋
1
3
4
5
//num=1์ผ ๋
1
2
4 //finaly๋ ์ค๊ฐ์ return์ ๋ง๋๋ ๊ฒฝ์ฐ์๋ finally ๋ธ๋ก์ ๋จผ์ ์ํ ํ์ ๋ฆฌํด์ ์คํํ๋ค.
finally๋ ์ฃผ๋ก ์์์ ์ ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค. ๋ํ try-catch-finally๋ฅผ ํตํด ๋์์ด ๋ฌถ์ฌ ์์ง์ด๋๋กํจ์ผ๋ก์จ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ ์ ์๋ค๋ ์ฅ์ ๋ ์กด์ฌํ๋ค.
public class UseInstaller {
public static void main(String[] args) {
// TODO: InstallApp์ ์ด์ฉํ๋ฉด์ ์์์ด ํ์คํ ์ ๋ฆฌ๋๋๋ก ํด๋ณด์.
InstallApp app = new InstallApp();
try {
app.copy();
app.install();
}catch(Exception e) {
e.printStackTrace();
}finally {
app.delete();
}
// END
System.out.println("์ค์น ์ข
๋ฃ");
}
}
*try ๊ตฌ๋ฌธ์ด ์ํ๋๋ค๋ฉด ํญ์ ์ํ๋๋ ๋ฌธ์ฅ
- try ๋ฌธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์๋
- try ๋ฌธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋
- try ๋ฌธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ์์ธ ์ฒ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ์๋
- try ๋ฌธ์ด๋ catch ๋ฌธ์์ return ๋ ๊ฒฝ์ฐ์๋
๋จ, System.exit(~)์ ์ํด JVM์ด ์ข ๋ฃ๋๋ฉด finally ๋ฌธ์ ์ํ๋์ง ์๋๋ค.
โ๏ธtry-with-resource
- JDK 1.7 ์ด์์์ ๋ฆฌ์์ค์ ์๋ close ์ฒ๋ฆฌ
try(๋ฆฌ์์ค_ํ์
1 res1 = ์ด๊ธฐํ; ๋ฆฌ์์ค_ํ์
2 res2 = ์ด๊ธฐํ; ...){
//์์ธ ๋ฐ์ ์ฝ๋
}catch(Exception e){
//exception handling ์ฝ๋
}
- try ์ ์ธ๋ฌธ์ ์ ์ธ๋ ๊ฐ์ฒด๋ค์ ๋ํด ์๋ close ํธ์ถ(finalliy ์ญํ )
- ๋จ, ํด๋น ๊ฐ์ฒด๋ค์ด AutoCloseable interface๋ฅผ ๊ตฌํํ ๊ฒ
- ๊ฐ์ข I/O stream, socket, connection, …
- ํด๋น ๊ฐ์ฒด๋ try ๋ธ๋ก์์ ๋ค์ ํ ๋นํ ์ ์์
- ๋จ, ํด๋น ๊ฐ์ฒด๋ค์ด AutoCloseable interface๋ฅผ ๊ตฌํํ ๊ฒ
โ๏ธthrows ํ์ฉ
Declare Exception (์ ์ธ์ ์์ธ ์ฒ๋ฆฌ)
์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ณณ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์๊ณ ๋ฉ์๋ ํธ์ถํ ๊ณณ์ผ๋ก
์์ธ๋ฅผ ๋์ ธ์ ๋ฉ์๋ ํธ์ถํ ๊ณณ์์ ์ฒ๋ฆฌํ๋๋ก ์์.
๋ชฉ์
- ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ณณ์์ ์ง์ ์ฒ๋ฆฌํ๋ฉด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ๊ณ ์ ๋๋ฏ๋ก ๋ฉ์๋ ํธ์ถํ ๊ณณ์ ๋ง๊ฒ ์ฒ๋ฆฌ๊ฐ ๋์ง ์๋๋ค.
- ๋ฉ์๋ ํธ์ถํ ๊ณณ์ ๋ง๊ฒ ์ฒ๋ฆฌํ๋๋ก ์์
- ์์ธ ์ฒ๋ฆฌ์ ๋ค์์ฑ์ ์ ๊ณต
- ๋ค์ํ ํจ์์์ ์ฌ๋ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ํ๋ก๊ทธ๋จ ๋ด์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ํ ๊ฐ์ง์ธ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ํจ์์์ ๋๊ฐ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์๋๊ณ , ์์ ์ด ์ฉ์ดํ์ง ์์ผ๋ฏ๋ก ์ค๋ฅ๋ฅผ ํ ๊ณณ(์ด๋ฒคํธ ์ฒ๋ฆฌํ๋ ๊ณณ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ ๊ณณ)์ผ๋ก ๋์ ธ์ ํ๋ฒ์ ์ฒ๋ฆฌํ๋ค.
- ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ฅผ return์ ํตํด์ ์ ๋ฌํ๊ณ ๋ฉ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์์ธ๋ฅผ ํตํด ๋ฉ์๋ ํธ์ถํ ๊ณณ์ผ๋ก ์ ๋ฌ๋๋ค.
ํ์
[modifiers] ๋ฆฌํดํ์
๋ฉ์๋์ด๋ฆ([์ธ์๋ค, ...]) [throws ์์ธ๋ค, ...]{
//์ค๋ฅ๊ฐ ๋ฐ์๋ ์ฝ๋
}
- ์์ธ๊ฐ ์์ด์ง๋ ๊ฒ์ด ์๋๋ผ ๋จ์ํ ์ ๋ฌ๋จ
- ์์ธ๋ฅผ ์ ๋ฌ๋ฐ์ ๋ฉ์๋๋ ๋ค์ ์์ธ ์ฒ๋ฆฌ์ ์ฑ ์ ๋ฐ์
checked exception๊ณผ throws
- checked exception์ ๋ฐ๋์ try~catch ๋๋ throws๊ฐ ํ์ํ๋ค.
- ํ์ํ ๊ณณ์์ try~catch ์ฒ๋ฆฌ
- runtime exception์ throws ํ์ง ์์๋ ์ ๋ฌ๋์ง๋ง
- ํ์ง๋ง ๊ฒฐ๊ตญ์ try~catch๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
package chapter07;
/**
* ์ฌ์ฉ์ ์ ์ Exception
*
* UncheckedException
* - ์์ธ ์ฒ๋ฆฌ ํ์ง ์์๋ ์ปดํ์ผ error๊ฐ ๋ฐ์ํ์ง ์์
* =>์คํ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
* - ์ข
๋ฅ
* RuntimeException๊ณผ RuntimeException์ ์์ ๋ฐ์ sub๋ค
*
* - ์ฌ์ฉ์ ์ ์ UncheckedException
* RuntimeException๊ณผ RuntimeException์ ์์๋ฐ์ sub๋ค์ ์์๋ฐ๋๋ค.
*
* CheckedException
* - ์์ธ ์ฒ๋ฆฌ ํ์ง ์์ผ๋ฉด ์ปดํ์ผ error๊ฐ ๋ฐ์ํ๋ค.
* => ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ ํด์ผ ํ๋ค.
* - ์ข
๋ฅ
* RuntimeException๊ณผ RuntimeException์ ์์ ๋ฐ์ sub๋ค์ ์ ์ธํ ๋๋จธ์ง ์์ธ๋ค
* ex) Exception, IOException
* - ์ฌ์ฉ์ ์ ์ CheckedException
* RuntimeException๊ณผ RuntimeException์ ์์๋ฐ์ sub๋ค์ ์์๋ฐ๋๋ค.
* ex) Exception
*/
class MyChecked extends Exception{
public MyChecked(String msg) {
super(msg); //getMessage()๋ฅผ ํตํด ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ ๋ฐ์ ์ ์๋ค.
}
}
class MyUnChecked extends RuntimeException{
public MyUnChecked(String msg) {
super(msg); //getMessage()๋ฅผ ํตํด ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ ๋ฐ์ ์ ์๋ค.
}
}
class ExceptionUse{
public static int mod(int i, int j) {
//MyUnChecked RuntimeException์ ์์๋ฐ์์ ์์ธ ์ฒ๋ฆฌ ํ์ง ์์๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
if(j==0) throw new MyUnChecked("0์ผ๋ก ๋๋ ์ ์์ต๋๋ค.");
return i/j;
}
public static int div(int i, int j) throws MyChecked{
//MyChecked๋ Exception์ ์์ ๋ฐ์ CheckedException์ด๋ฏ๋ก ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋ค.
if(j==0) throw new MyChecked("0์ผ๋ก ๋๋ ์ ์์ต๋๋ค.");
return i/j;
}
}
public class ExceptionTest5 {
public static void main(String[] args) {
//UnCheckedException์ ๋์ง๋ mod ๋ฉ์๋๋ ํ์์ ์์ธ ์ฒ๋ฆฌํ๋ค.
ExceptionUse.mod(256,8);
try {
//CheckException์ ๋์ง๋ div ๋ฉ์๋๋ ํธ์ถ์ ๋ฐ๋์ ์์ธ์ฒ๋ฆฌํด์ผ ํ๋ค.
ExceptionUse.div(256,8);
}catch(MyChecked e){
e.printStackTrace();
}
}
}
โ๏ธ๋ก๊ทธ ๋ถ์๊ณผ ์์ธ์ ์ถ์
- Throwable์ printStackTrace๋ ๋ฉ์๋ ํธ์ถ ์คํ ์ ๋ณด ์กฐํ ๊ฐ๋ฅ
- ์ต์ด ํธ์ถ ๋ฉ์๋์์๋ถํฐ ์์ธ ๋ฐ์ ๋ฉ์๋๊น์ง์ด ์คํ ์ ๋ณด ์ถ๋ ฅ
- ๊ผญ ํ์ธํด์ผํ ์ ๋ณด
- ์ด๋ค ์์ธ์ธ๊ฐ? - ์์ธ ์ข ๋ฅ
- ์์ธ ๊ฐ์ฒด์ ๋ฉ์์ง๋ ๋ฌด์์ธ๊ฐ? - ์์ธ ์์ธ
- ์ด๋์ ๋ฐ์ํ๋๊ฐ? - ๋๋ฒ๊น
์ถ๋ฐ์
- ์ง์ ์์ฑํ ์ฝ๋๋ฅผ ๋๋ฒ๊น ๋์์ผ๋ก ์ผ์ ๊ฒ
- ์ฐธ์กฐํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(java.xx ๋ฑ)๋ ๊ณผ๊ฐํ ๊ฑด๋๋ฐ๊ธฐ
๋งค์๋ ์ฌ์ ์์ throws
๋งค์๋ ์ฌ์ ์์ ์กฐ์ ํด๋์ค ๋ฉ์๋๊ฐ ๋์ง๋ ์์ธ๋ณด๋ค ํฐ ์์ธ๋ฅผ ๋์ง ์ ์๋ค.(๋ถ๋ชจ๊ฐ ์น์ง ์์ ์ฌ๊ณ ๋ฅผ ์์์ด ์น ์ ์๋ค.)
์์ธ ๋ณํ
ํ์ ๊ณ์ธต์์ ๋ฐ์ํ ์์ธ๋ ์์ ๊ณ์ธต์ ๋ง๋ ์์ธ๋ก ๋ฐ๊ฟ์ ๋์ ธ์ผ ํ๋ค.
Exception Chaining
ํ์ ๊ณ์ธต์์ ๋ฐ์ํ ์์ธ ์ ๋ณด๊ฐ ์์ ๊ณ์ธต์ ์์ธ๋ฅผ ๋๋ฒ๊น ํ๋๋ฐ ์ ์ฉํ ๊ฒฝ์ฐ ์ฌ์ฉ
- ํ์ ๊ณ์ธต์ ์์ธ๋ฅผ ์์ธ์ผ๋ก ์์ ๊ณ์ธต์์ ์์ธ๋ฅผ ๋ฐ์์ํด
๐Collection
๋ฐฐ์ด
๋ฐฐ์ด์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๋ก, ๋์ผํ ๋ฐ์ดํฐ ํ์ ๋ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ค.
⇒ํ์ ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ ๋งค๋ฒ ๋ค๋ฅธ ๋ฐฐ์ด์ ํ์๋ก ํ๋ค.
Collection Framework
- java.util ํจํค์ง
- ๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ์ ๊ณต → DB์ฒ๋ผ CRUD ๊ธฐ๋ฅ ์ค์
- List, Set, Map(3๋ ์ฃผ์ interface)
- List: ์ ๋ ฅ ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ, ์์๊ฐ ์์ผ๋๊น ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ๋ฝ
- ArrayList, LinkedList
- Set: ์ ๋ ฅ ์์๋ฅผ ์ ์งํ์ง ์๋ ๋ฐ์ดํฐ์ ์งํฉ, ์์๊ฐ ์์ด์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ณํ ์ ์์ → ์ค๋ณต ํ๋ฝํ์ง ์์
- HashSet, TreeSet
- Map: key์ value์ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์งํฉ. ์์๋ ์๊ณ key์ ์ค๋ณต ๋ถ๊ฐ, value๋ ์ค๋ณต ๊ฐ๋ฅ
- HashMap, TreeMap
โ๏ธList
์ ๋ ฅ ์์ O, ๋ฐ์ดํฐ์ ์ค๋ณต O
ํน์ ์์น O(index O)
- add(int index, E element)
- get(int index)
- indexOf(Object o)
- lastIndexOf(Object o)
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์์๋๋ก ์ ์ฅํด ์ค๋ค.
- ๋ฐ์ดํฐ์ index๋ 0๋ถํฐ size()-1๊น์ง
- ์ค๊ฐ ์ฝ์ ํ ์ ์๋ index๋ 0๋ถํฐ size()
⇒๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด IndexOutOfBoundsException์ด ๋ฐ์ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ค๋ณตํด์ ์ ์ฅํ ์ ์๋ค.
- IndexOf(Object o), lastIndexOf(Object o), contains(Object o), remove(Object o)์ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด์ **equals(Object o)**๋ฅผ ํธ์ถํด์ ๊ฐ์ฒด๊ฐ ๊ฐ์์ง ๋น๊ต ํ ์ฒ๋ฆฌํ๋ค.
๋ฐฐ์ด๊ณผ ArrayList
๋ฐฐ์ด์ ๊ฐ๋จํ๊ณ ์ฌ์ฉ์ด ์ฌ์ฐ๋ฉฐ ์ ๊ทผ ์๋๊ฐ ๋น ๋ฅด์ง๋ง, ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ด ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ํด ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ณต์ฌํด์ผ ํ๋ค. ๋ํ ๋น์์ฐจ์ ์ธ ๋ฐ์ดํฐ์ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
⇒๋ฐฐ์ด์ ์ฌ์ฉํ๋ ArrayList๋ ํ์์ ์ผ๋ก ๋ฐฐ์ด์ ์ฅ-๋จ์ ์ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ๋ค.
LinkedList
๊ฐ ์์๋ฅผ Node๋ก ์ ์ฅํ๊ณ Node๋ ๋ค์ ์์์ ์ฐธ์กฐ๊ฐ๊ณผ ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋จ
- ๊ฐ ์์๊ฐ ๋ค์ ์์์ ๋งํฌ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ฉฐ ์ฐ์์ ์ผ๋ก ๊ตฌ์ฑ๋ ํ์๊ฐ ์๋ค.
public class ListTest {
public static void main(String[] args) {
//ArrayList๋ ์ ์ฅํ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
ArrayList<String> list = new ArrayList<>(10);
list.add("hello");
//๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค node๋ฅผ ์ถ๊ฐํด์ ์ฐ๊ฒฐํ๋ฏ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ก ์์ฑํ๋ค.
LinkedList<String> list2 = new LinkedList<>();
Queue<Integer> queue = new LinkedList<>();
Queue<Integer> queue2 = new ArrayDeque<>(); //list๋ฅผ ์์๋ฐ์ง ์์
}
}
๊ฒฐ๋ก
- ์๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ArrayList์ LinkedList๋ ํฐ ์ฐจ์ด๊ฐ ์์
- ์ ์ ์ธ ๋ฐ์ดํฐ์ ํ์ฉ, ๋จ์ํ ๋ฐ์ดํฐ ์กฐํ์ฉ: ArrayList
- ๋์ ์ธ ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ ๊ฐ ๋ง์ ์์ : LinkedList
โ๏ธSet
์ ๋ ฅ ์์ X, ๋ฐ์ดํฐ์ ์ค๋ณต X
- ์ ๋ ฅ ์์๋ฅผ ๊ด๋ฆฌํ์ง ์๊ณ ์ฃผ๋จธ๋์ ๊ตฌ์ฌ(๋ฐ์ดํฐ)๋ฅผ ๋ฃ๋ ํํ
- ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ณํ ์์(index)๊ฐ ์์ด ์ค๋ณต์ด ํ์ฉ๋์ง ์๋๋ค.
- ํจ์จ์ ์ธ ์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ ์๋จ
์ค๋ณต์ด ์กด์ฌํ๋ numList: [1, 2, 2, 3, 3, 3, 4, 5] Set์ ํตํ ์ค๋ณต์ ๊ฑฐ uniqueSet: [1, 2, 3, 4, 5] ๋ค์ List๋ก uniqueList: [1, 2, 3, 4, 5]import java.util.*; public class ListToSetToListTest { public static void main(String[] args){ List<Integer> numList = Arrays.asList(1,2,2,3,3,3,4,5); System.out.println("์ค๋ณต์ด ์กด์ฌํ๋ numList: "+numList); Set<Integer> uniqueSet = new HashSet<>(numList); System.out.println("Set์ ํตํ ์ค๋ณต์ ๊ฑฐ uniqueSet: "+uniqueSet); numList = new ArrayList<>(uniqueSet); System.out.println("๋ค์ List๋ก uniqueList: "+numList); } }
import java.util.HashSet;
import java.util.Set;
public class SetTest {
Set<Object> hset = new HashSet<Object>();
private void addMethod() {
hset.add(Integer.valueOf(1));
hset.add("Hello");
hset.add("Hi");
hset.add("There");
hset.add("Hello"); // ๋์ผํ ๋ฐ์ดํฐ ์ถ๊ฐ ํ์ธ
hset.add(1); // ๊ธฐ๋ณธํ์ wrapper๋ฅผ ํตํด ์ถ๊ฐ
// TODO: SmartPhone ํ์
์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํด๋ณด์.
SmartPhone sp1 = new SmartPhone("010");
SmartPhone sp2 = new SmartPhone("010");
System.out.println("equals: "+sp1.equals(sp2));
hset.add(sp1);
hset.add(sp2);
// END
System.out.println("๋ฐ์ดํฐ ์ถ๊ฐ ๊ฒฐ๊ณผ: " + hset);
}
private void retrieveMethod() {
System.out.println("๋ฐ์ดํฐ ๊ฐ์: " + hset.size());
for (Object sobj : hset) {
System.out.println("๋ฐ์ดํฐ ์กฐํ: " + sobj);
}
}
private void removeMethod() {
hset.remove("Hello");
System.out.println("๋ฐ์ดํฐ ์ญ์ ๊ฒฐ๊ณผ: " + hset);
}
public static void main(String[] args) {
SetTest test = new SetTest();
test.addMethod();
test.retrieveMethod();
test.removeMethod();
}
}
- index๊ฐ ์๊ธฐ๋๋ฌธ์ ํน์ ์์๋ฅผ ์์ ํ ์ ์๋ค. (์์ X)
- ๋์ผํ ๋ฐ์ดํฐ์ ๊ธฐ์ค
// TODO: SmartPhone ํ์
์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํด๋ณด์.
hset.add(new SmartPhone("010"));
hset.add(new SmartPhone("010"));
๊ฐ์ฒด์ ์ ์ฅ์์๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ธ์
// TODO: ๋์ผํ ๋ฒํธ์ SmartPhone์ด๋ฉด ํ๋๋ง ์ถ๊ฐ๋ ์ ์๋๋ก ์ฒ๋ฆฌํ์์ค.
@Override
public boolean equals(Object obj) {
if(obj!=null && obj instanceof SmartPhone phone) {
return this.number.equals(phone.number);
}
return false;
}
@Override
public int hashCode() {
return this.number.hashCode();
}
๋์ผํ ๋ฐ์ดํฐ์ ๊ธฐ์ค์ ๊ฐ์ฒด์ equals()๊ฐ true๋ฅผ ๋ฆฌํดํ๊ณ hashcode๊ฐ์ด ๊ฐ์์ผ ํ๋ค.
๋ฐ๋ผ์ equals()๋ฟ๋ง ์๋๋ผ hashCode๋ overrideํด์ผํ๋ค.
โ๏ธMap
- key์ value๋ฅผ ํ๋์ Entry๋ก ๋ฌถ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
- key: Objectํํ๋ก ๋ฐ์ดํฐ ์ค๋ณต์ ํ๋ฝํ์ง ์์
- value: Objectํํ๋ก ๋ฐ์ดํฐ ์ค๋ณต์ด ํ๋ฝ ๋จ
- put(K key, V Value)
- Java์ Map์์ put ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์์ ํ๋ฉด ํด๋น ํค์ ๋ํ ์ด์ ๊ฐ์ด ๋ฐํ๋ฉ๋๋ค. ๋ง์ฝ ์ด์ ์ ํด๋น ํค์ ์ฐ๊ฒฐ๋ ๊ฐ์ด ์์๋ค๋ฉด **null**์ด ๋ฐํ๋๋ค.
- containsKey(Object key)
- get(Object key)
- keySet()
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class MapTest {
public static void main(String[] args){
Map<String, Integer> ageMap = new HashMap<>();
ageMap.put("John", 25);
ageMap.put("Stormy", 5);
ageMap.put("Stonsy", 23);
System.out.println(ageMap);
for(Entry<String, Integer> entry : ageMap.entrySet()){
String name = entry.getKey();
int age = entry.getValue();
System.out.println(name+"์ ํ์ฌ ๋์ด๋ "+age+"์
๋๋ค.");
}
ageMap.remove("Stormy");
System.out.println("stormy ์ญ์ ํ");
for(Entry<String, Integer> entry : ageMap.entrySet()){
String name = entry.getKey();
int age = entry.getValue();
System.out.println(name+"์ ํ์ฌ ๋์ด๋ "+age+"์
๋๋ค.");
}
}
}
โ๏ธ์ ๋ ฌ
์์๋ฅผ ๊ฐ์ง๋ Collection๋ค๋ง ์ ๋ ฌ์ด ๊ฐ๋ฅํ๋ค.
- List ๊ณ์ด
- Set์์๋ SortedSet์ ์์ ๊ฐ์ฒด
- Map์์๋ SortedMap์ ์์ ๊ฐ์ฒด(key ๊ธฐ์ค)
Comparator์ ํ์ฉ
- ๊ฐ์ฒด๊ฐ Comparable์ ๊ตฌํํ๊ณ ์์ง ์๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ๋ ฌํ๋ ค๋ ๊ฒฝ์ฐ
- String์ ์ํ๋ฒณ ์์ด ์๋ ๊ธ์ ์ ๋ณ๋ก ์ ๋ ฌํ๋ ค๋ฉด?
Comparable: ๋ด๊ฐ ์ ๋ ฌ๋๋ ๊ฒ
Comparator: ๋ฌด์์ ์ ๋ ฌํ๋ ๊ฒ
import java.util.*;
public class SortTest {
static class StringLengthComparable implements Comparator<String> {
@Override
public int compare(String s1, String s2){
int len1 = s1.length();
int len2 = s2.length();
return Integer.compare(len1, len2);
}
}
public static void main(String[] args){
//1. ๋ฐฐ์ด์ ์ ๋ ฌ(์ค๋ฆ์ฐจ์ ์ ๋ ฌ)
Integer[] numArr = {2,1,4,3,5};
Arrays.sort(numArr);
System.out.println("์ซ์ ๋ฐฐ์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ: "+Arrays.toString(numArr));
//2. ๋ฐฐ์ด์ ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ)
Arrays.sort(numArr, (n1,n2)->n2-n1);
Arrays.sort(numArr, (n1,n2)->{return n2-n1;});
System.out.println("์ซ์ ๋ฐฐ์ด ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ: "+Arrays.toString(numArr));
//3. List์ ์ ๋ ฌ
List<Integer> numList = new ArrayList<>();
//List<Integer> numList = Arrays.asList(5,1,2,4,3);
numList.add(5);
numList.add(1);
numList.add(2);
numList.add(4);
numList.add(3);
Collections.sort(numList); // ์ค๋ฆ์ฐจ์์ ๋ ฌ
System.out.println("Integer List ์ค๋ฆ์ฐจ์ ์ ๋ ฌ: "+numList);
Collections.sort(numList,(n1,n2)->(n2-n1));
System.out.println("Integer List ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ: "+numList); // ๋ด๋ฆผ์ฐจ์์ ๋ ฌ
//4. String์ ์ ๋ ฌ
List<String> strList = Arrays.asList("011", "010", "111");
System.out.println("String List: "+strList);
Collections.sort(strList);
System.out.println("String List ์ค๋ฆ์ฐจ์ ์ ๋ ฌ: "+strList);
//5. String ๊ธ์๊ธธ์ด์ ์ ๋ ฌ
List<String> strList2 = Arrays.asList("Stormy", "Stonesy", "John");
Collections.sort(strList2, new StringLengthComparable());
System.out.println("String List ๊ธ์๊ธธ์ด์ ์ ๋ ฌ: "+strList2);
}
}
์ซ์ ๋ฐฐ์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ: [1, 2, 3, 4, 5]
์ซ์ ๋ฐฐ์ด ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ: [5, 4, 3, 2, 1]
Integer List ์ค๋ฆ์ฐจ์ ์ ๋ ฌ: [1, 2, 3, 4, 5]
Integer List ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ: [5, 4, 3, 2, 1]
String List: [011, 010, 111]
String List ์ค๋ฆ์ฐจ์ ์ ๋ ฌ: [010, 011, 111]
String List ๊ธ์๊ธธ์ด์ ์ ๋ ฌ: [John, Stormy, Stonesy]
Anonymous Nested Class
- ํด๋์ค์ ์ด๋ฆ์ด ์์ด ๊ฐ์ฒด ์์ฑ๊ณผ ๋์์ ๊ตฌํํ๋ ํด๋์ค
- ๋ถ๋ชจ์ ์ด๋ฆ์ ๋น๋ ค์ ๊ฐ์ฒด๋ฅผ ์์ฑ => ์์์ด ๊ธฐ๋ณธ
ํ์
new ๋ถ๋ชจ(){ //๊ตฌํํ๊ธฐ }
Lamda
- ํจ์์ ์ถ์ฝํ
- Anonymous Nested Class์ ๊ฐ์ ์ญํ
ํ์
( )->{ }
public class SortTest {
public static void main(String[] args){
//1. ๋ฐฐ์ด์ ์ ๋ ฌ(์ค๋ฆ์ฐจ์ ์ ๋ ฌ)
Integer[] numArr = {2,1,4,3,5};
Arrays.sort(numArr);
System.out.println(Arrays.toString(numArr));
//2. ๋ฐฐ์ด์ ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ)
Arrays.sort(numArr, (n1,n2)->n2-n1);
Arrays.sort(numArr, (n1,n2)->{return n2-n1;});
System.out.println(Arrays.toString(numArr));
}
}
๐Java ์คํธ๋ฆผ(Stream)
Java ์คํธ๋ฆผ Stream (1) ์ด์ ๋ฆฌ
Stream์ ํตํด ๋ฐฐ์ด ๋๋ ์ปฌ๋ ์ ์ธ์คํด์ค์ ํจ์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์กฐํฉํด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๊ณ ๊ฐ๊ณต๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
Stream์ ๋ ํ๋์ ์ฅ์ ์ ๊ฐ๋จํ๊ฒ ๋ณ๋ ฌ์ฒ๋ฆฌ(multi-threading)์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
โป์์
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class StreamTest {
public static class Person{
String name;
int age;
String address;
Person(){}
Person(String name, int age, String address){
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString(){
return "name: "+name+", age:"+age+", address: "+address;
}
}
public static void main(String[] args){
//1. Stream์ ์์ฑ
System.out.println("1. Stream ์์ฑ");
String[] arr = {"John", "John","APC", "AcneStudio", "Stormy", "Stonesy"};
Stream<String> stream = Arrays.stream(arr);
stream.forEach(System.out::println);
//2. distinct()๋ฅผ ํตํ ์ค๋ณต ์ ๊ฑฐ
System.out.println("\\n2. distinct()๋ฅผ ํตํ ์ค๋ณต ์ ๊ฑฐ");
//์ค๋ณต ์ ๊ฑฐ ํ ์๋ก์ด ์คํธ๋ฆผ ์์ฑ
Stream<String> uniqueStream = Arrays.stream(arr).distinct();
uniqueStream.forEach(System.out::println);
//3-1. filter๋ฅผ ํตํด ์ํ๋ ์์ ์ถ์ถ - A ํฌํจ ๋ฌธ์์ด ํํฐ๋ง
System.out.println("\\n3. filter()๋ฅผ ํตํ ์ํ๋ ์์ ์ถ์ถ-A ํฌํจ ๋ฌธ์์ด filtering");
Arrays.stream(arr).filter(word->word.contains("A")).forEach(System.out::println);
//3-2. filter๋ฅผ ํตํด ์ํ๋ ์์ ์ถ์ถ - ๋ฌธ์์ด ๊ธธ์ด
System.out.println("\\n4. filter()๋ฅผ ํตํ ์ํ๋ ์์ ์ถ์ถ-๋ฌธ์์ด ๊ธธ์ด filtering");
Arrays.stream(arr).filter(word->word.length()>=5).forEach(System.out::println);
//4. Stream.iterate: ์ฃผ์ด์ง ์ด๊น๊ฐ๋ถํฐ ์์ํด ์ฃผ์ด์ง ์ฐ์ฐ์๋ฅผ ๋ฐ๋ณต์ ์ฉํ์ฌ ๋ฌดํํ ์์ ์์ฑ
System.out.println("\\n5. Stream.iterate()๋ฅผ ํตํ ์์ ์์ฑ");
Stream<Integer> numStream = Stream.iterate(3, n->n+1).limit(10);
numStream.forEach(n->System.out.print(n+" "));
System.out.println();
//5. skip()
System.out.println("\\n6. skip(), before: "+Arrays.toString(arr));
Arrays.stream(arr).skip(2).forEach(s->System.out.print(s+" "));
System.out.println();
//6. ์ ๋ ฌ
System.out.println("\\n7-1. Stream ์ค๋ฆ์ฐจ์ ์ ๋ ฌ");
Integer[] numArr = {4,1,2,5,3};
Arrays.stream(numArr).sorted().forEach(n-> System.out.print(n+" "));
System.out.println("\\n7-2. Stream ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ");
Arrays.stream(numArr).sorted((n1,n2)->n2-n1).forEach(n-> System.out.print(n+" "));
System.out.println();
//7. ๊ฐ์ฒด์ Stream
System.out.println("\\n8. ๊ฐ์ฒดStream ํํฐ๋ง");
Person[] persons = {new Person("John", 25, "์์ธ"),
new Person("Stormy", 5, "LA"),
new Person("Stonesy", 23, "์์ธ"),};
Stream<Person> personStream = Arrays.stream(persons);
personStream.filter(p->p.age>=20).forEach(p-> System.out.println(p));
}
}
'๊ธฐํ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JVM (0) | 2024.10.30 |
---|---|
JAVA(1) (0) | 2024.01.20 |
[๋์์ธํจํด]Iterator Pattern (0) | 2021.12.02 |
[Design Pattern]Adapter Pattern (0) | 2021.11.16 |
[Design Pattern]Command Pattern (0) | 2021.11.16 |