Dev/Java 15

Comparator 와 Comparable 의 차이 - 객체 내부 비교와 외부 비교 관점

예제 소스 링크 Comparator와 Comparable 이란 뭘까? 둘 다 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Comparable Comparable 을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들을 의미하며 주로 Integer와 같은 wrapper 클래스와 String, Date, File과 같은 것들을 말한다. 기본적으로 오름차순으로 구현되어 있다. 아래 소스는 실제로 java.lang 라이브러리에 있는 Integer, String 같은 클래스를 확인해본 것이다. 각각 기준에 맞게 Comparable interface를 구현해서 사용하고 있다. // Integer public final class Integer extends Numbe..

Dev/Java 2024.03.25

Java Stream ( feat. Optional 과 collect )

이전 포스팅은 여기로 2024.03.11 - [개발/java] - 람다식 ( Lamda expression ) / @FunctionalInterface 예제 소스 링크 본 게시글의 예제 코드를 이해하기 위해서는 람다식과 메서드 참조 ( 더블 콜론 )에 대한 이해가 있어야 하므로, 해당 내용에 대해 모른다면 위에 있는 이전 포스팅을 읽어보는 것을 추천한다. 왜 스트림이 등장했을까? for, Iterator 를 이용해서 코드를 짜게 되면, 재사용성과 가독성이 떨어진다는 단점이 있다. Collection 이나 Iterator 만 봐도 같은 기능의 메서드들이 중복되어 있고, List와 배열 정렬 시에도 동일한 sort() 함수를 사용하지만 각각 Collections.sort(), Array.sort()를 사용해..

Dev/Java 2024.03.18

익명 클래스(annoymous class)

익명 클래스란 무엇인가? 익명 클래스는 이름이 없는 클래스를 의미한다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한 번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다. 익명 클래스는 다음과 같은 특징을 가진다. 생성자를 가질 수 없다 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다. 즉 오로지 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있다. 예시 코드로 나타내면 다음과 같다. // 익명 클래스를 사용하지 않은 경우 class Innerclass { public static void main(String[] args) { Classb b = new ClassB("make"); b.addActionLi..

Dev/Java 2024.03.12

다형성(Polymorphism)과 참조변수 ( with. instanceof 연산자의 필요성)

다형성과 참조변수 객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며 자바에서 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현할 수 있다. 즉 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것이다. Class Tv { boolean power; int channel; void power(); void channelUp(); void channelDonw(); } class CaptionTv extends Tv { String next; void caption() ... } Tv 클래스와 CaptionTv 클래스가 다음과 같이 정의 되어 있을 때 두 클래스를 생성하고 사용하는 방법은 일반적으로 다음과 같..

Dev/Java 2024.03.12

람다식 ( Lamda expression ) / @FunctionalInterface

본 글에서는 기본적인 람다사용 법과 람다를 사용하는 이유에 대해 작성하고자 한다. 예제소스링크 람다식이란? jdk 1.8부터 추가된 람다식은 자바를 객체지향언어인 동시에 함수형 언어로 만들었다. 람다식이란 메서드를 하나의 식(expression)으로 표현한 것이다. 메서드는 객체 지향에서 객체의 행위나 동작을 의미하는 용어인데, 클래스에 반드시 속해야 한다는 제약이 있다. 모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야하고, 객체도 새로 만들어야 하지만 람다식은 오직 람다식 자체만으로도 이 메서드의 역할을 대신할 수 있게 해준다. 메서드를 람다식으로 변환하면 메서드의 이름과 반환 값이 사라지게 된다. 다음 예제를 보면 쉽게 이해할 수 있다. 일반적인 메서드 int max(int a, in..

Dev/Java 2024.03.11