자바 28

[JAVA] 컬렉션 프레임워크(collection framework)

컬렉션 프레임 워크란? 다수의 데이터들을 저장하는 클래스들을 표준화한 설계를 뜻한다. 즉, 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 방법들을 제공하는 클래스들의 집합을 의미한다. 컬렉션 프레임워크의 핵심 인터페이스 - List 인터페이스 - Set 인터페이스 - Map 인터페이스 이 중에서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의됨. 인터페이스 설명 구현 클래스 List 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. Vector, ArrayList, LinkedList, Stack, Queue Set 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. HashSet, TreeSet ..

[JAVA] 예외 던지기(exception re-throwing) / 연결된 예외(chained exception)

예외 던지기(exception re-throwing) 란? 한 메서드에서 발생할 수 있는 예외가 여럿인 경우 몇 개는 try-catch문을 통해서 메서드 내에서 자체적으로 처리하고, 그 나머지는 선언부에 지정하여 호출한 메서드에서 처리하도록 함으로써, 양쪽에서 나눠서 처리되도록 할 수 있다. 그리고 단 하나의 예외에 대해서도 예외가 발생한 메서드와 호출한 메서드, 양쪽에서 처리하도록 할 수 있다. 이것은 예외를 처리한 후에 인위적으로 다시 발생시키는 방법을 통해서 가능한데, 이것을 예외 되던지기(exception re-throwing)라고 한다. 연결된 예외(chained exception) 란? 한 예외가 다른 예외를 발생시킬 수도 있다. A가 B의 예외를 발생시킨다면, A를 B의 ‘원인 예외(caus..

[JAVA] 사용자정의 예외 만들기

말 그대로 예외는 프로그래머가 기존의 정의된 예외 클래스 외에 필요에 따라 새로운 예외 클래스를 정의하여 사용할 수 있다. 🙄어떻게 내 마음대로 예외를 만들 수 있는 걸까? → 우리가 이때까지 배운 상속을 통해서 사용자 정의를 만들 수 있다. Exception클래스 또는 RuntimeException클래스로부터 상속받아 클래스를 만들기도 하고, 필요에 따라 알맞은 예외 클래스를 선택하여 상속받아 만들 수 있다. 말로만 보면 알지 못하니 예를 들어보면! class MyException extends Exception { MyException(String msg) { // 문자열을 메개변수로 받는 생성자 super(msg); // 부모인 Exception 클래스의 생성자를 호출 } } Exception 클래..

[JAVA] 자동 자원 반환 try-with-resources

JDK1.7부터 try-catch-resources문이라는 try-catch문의 변형이 새로 추가되었다. 이 구문은 입출력(I/O)과 관련된 클래스를 사용할 때 유용하다. 주로 입출력에 사용되는 클래스 중에서는 사용한 후에 꼭 닫아 줘야 하는 것들이 있다. 그래서 사용했던 자원(resources)이 반환되기 때문이다. 🙄하지만 그렇게 사용하지 않고 finally를 사용하여 닫아주면 안 되는 건가? try{ fis = new FileInputStream("score.dat"); dis = new DataInputStream(fis); }catch(IOException ie){ ie.printStackTrace(); } finally { dis.close(); } 위 코드처럼 할 경우 별 문제가 없어 보인다..

[JAVA] finally 블럭

finally 블록은 예외의 발생 여부에 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용된다. try-catch문의 끝에 선택적으로 덧붙여 사용할 수 있으며, try-catch-finally 순서로 구성된다. try{ // 예외가 발생할 가능성이 있는 문장들을 넣는다. }catch(Exception e1){ // 예외처리를 위한 문장을 적는다. }finally{ // 예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다. // finally 블럭은 try-catch 문의 마지막에 위치해야한다. } 예외 발생한 경우 : try → catch → finally 순으로 진행 예외가 발생하지 않은 경우 : try → finally 순으로 진행 ✅ 정리 finally는 예외가 생겨도 무조건 실행되는..

[ JAVA ] 추상클래스(abstract class)란?

추상클래스(abstract class)란? 클래스 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 단어 뜻 그래도 완성되지 못한 채로 남겨진 설계도를 말한다. 하지만 우리가 생각하는 것 처름 클래스가 미완성이라 아무것도 없는 것이 아니라 단지 미완성 메서드(추상메서드)를 포함하고 있다는 의미이다. 🙄 그래서 추상 클래스 사용하는 이유는 뭘까? → 자식 클래스에서 반드시 사용되어야 하는 메소드를 작성해야 할 때이다. 🙄그러면 그냥 오버라이딩해서 사용하면 되지 않나? → 상속받은 자식 클래스에서는 메소드들이 완전히 구현된 것으로 인식하고 오버라이딩하지 않을 수 있기 때문에 추상 클래스를 사용한다. 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상..

[ JAVA ] 다형성 - 매개변수의 다형성, 여러 종류의 객체 배열

1. 매개변수의 다형성 참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다. 예제로 알아보자! 💎예제💎 class Product { int price; int bonusPoint; } class TV extends Product{} class Computer extends Product{} class Audio extends Product{} class Buyer { int money = 1000; int bonusPoint = 0; } 위 코드를 보면 Product클래스는 TC,Audio,Computer클래스의 부모클래스이며, Buyer 클래스는 제품을 구입하는 사람을 클래스로 표현한 것이다. 여기서 Buyer 클래스에 물건을 구입하는 기능의 메서드를 추가해보자! 구입할 대상이 필요하므로 매개변수..

[ JAVA ] Instanceof 연산자란? Instanceof 연산자 사용방법

Instanceof 연산자란? 객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자 이다.즉, 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 해당 연산자를 사용한다. 💡문법💡 object instanceOf type object가 type이거나 type을 상속받는 클래스라면 true를 리턴합니다. 그렇지 않으면 false를 리턴합니다. 💎예제💎 간단하게 살펴보자면, class A { } class B extends A { } // A 클래스를 상속 public static void main(String[] args) { A a = new A(); B b = new B(); System.out.println(a instanceof A); // true 출력 Syst..

[ JAVA ] 다형성 - 참조변수의 형변환

참조형 변수도 형변환이 가능한가? → 가능하다.기본형 변수와 같이 참조 변수도 형변환이 가능하다. 단, 조건이 있다. 서로 상속관계이 있는 클래스 사이에서만 가능하다. ✅ 참고 바로 위 부모나 바로 밑 자식이 아닌, 부모의 부모인 조부모로도 형변환이 가능하다. 따라서 모든 참조변수는 모든 클래스의 조상인 Object클래스 타입으로 형변환이 가능다. 기본형 변수의 형변환에서 작은 자료형에서 큰자료형의 형변환은 생략이 가능 했듯이, 참조형 변수의 형변환에서는 자식타입의 참조변수를 부모타입으로 형변환하는 경우에 형변환을 생략할 수 있다. 자식타입 → 부모타입(Up-casting) : 형변환 생략가능 부모타입 → 자식타입(Down-casting) : 형변환 생략불가 * 참조변수간의 형변환 역시 캐스트연산자를 사..

[ JAVA ] 다형성이란?

다형성이란? 객체지향 개념에서는 '여러 가지 형태를 가질 수 있는 능력'을 의미한다. Java에서는 한 타입의 참조 변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 구체적으로 말하자면, 부모 클래스 타입의 참조 변수로 자식 클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. 💡잠깐, 참조 변수 타입과 인스턴스 타입이 같아야 하는 것 아닌가❗❔ → 답은 아니다! 참조 변수 타입과 인스턴스 타입이 일치하는 것이 보통이지만, 서로 상속 관계에 있을 경우, 다음과 같이 부모 클래스의 타입의 참조 변수로 자식 클래스의 인스턴스를 참조하도록 하는 것도 가능하다! 🙄 그러면 왜 이렇게 사용하는 것일까? 그리고 어떤 차이가 있을까? → 일단 어떤 차이가 있는지 알아보고 왜 ..

728x90