java18 Comparable과 Comparator 자바로 알고리즘 문제를 푸는 경우, 사용자 정의 클래스를 정렬하는 경우를 빈번하게 만날 수 있다. 이 경우에는 Comparable 혹은 Comparator 인터페이스를 구현해 정렬을 하게 된다. 오늘은 이 두 인터페이스에 대해 간략하게 알아보자. ◆ Comparable TreeSet과 TreeMap은 정렬을 위해 java.lang.Comparable을 구현한 객체를 요구한다. Integer, String 등은 모두 Comparable 인터페이스를 구현하고 있기 때문에 우리가 따로 구현해줘야 하는 부분이 없다. 따라서 사용자 정의 클래스도 Comparable 인터페이스의 compareTo() 메소드를 Override해주면 TreeSet, TreeMap에서 자동으로 정렬이 가능하게 된다. public cla.. 2021. 8. 10. Stream - (2) 스트림 얻기 지난 시간에는 스트림이란 무엇인지에 대해 간략하게 알아보았다. 오늘은 스트림을 얻는 방법에 대해 알아보자. 1. 소스에 따른 스트림 구현 객체 얻기 리턴 타입 메소드 (매개 변수) 소스 Stream java.util.Collection.stream() java.util.Collection.parallelStream() Collection Stream IntStream LongStream DoubleStream Arrays.stream(T[]), Stream.of(T[]) Arrays.stream(int[]), IntStream.of(int[]) Arrays.stream(long[]), LongStream.of(long[]) Arrays.stream(double[]), DoubleStream.of(doub.. 2021. 7. 19. Stream - (1) 스트림이란? 오늘은 자바 8부터 추가된 컬렉션의 저장 요소를 하나씩 참조하여 람다식으로 처리할 수 있도록 해주는 반복자인 Stream에 대해 알아보고자 한다. 1. 반복자 // 자바 7 이전까지 컬렉션 요소 iterator를 활용한 순차적 처리 List nameList = Arrays.asList("A", "B", "C"); Iterator iter = list.iterator(); while(iterator.hasNext()) { String name = iterator.next(); System.out.println(name); } // 자바 8 이후 Stream을 이용한 순차적 처리 List nameList = Arrays.asList("A", "B", "C"); Stream stream = list.strea.. 2021. 7. 12. 3-3. Flush와 준영속 1. Flush 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것을 말한다. (영속성 컨텍스트에 보관된 엔티티를 지우는 것이 아님) * 플러시 실행 과정 1. 변경 감지가 동작, 영속성 컨텍스트에 있는 모든 Entity 스냅샷과 비교해 수정된 Entity를 찾는다. 수정된 Entity는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 2. 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다. * 플러시 방법 1. em.flush()를 직접 호출 테스트나 다른 프레임워크와 JPA를 함께 사용할 때를 제외하고 거의 사용하지 않음. 2. 트랜잭션 커밋 시 플러시 자동 호출 DB에 변경 내용을 SQL로 전달하지 않고 트랜잭션만 커밋하면 어떤 데이터도 DB에 반영되지 않는다. 그렇기에 트랜.. 2021. 6. 7. 인터페이스 (Interface) 인터페이스 객체의 사용 방법을 정의한 타입이다. 인터페이스 선언 [ public ] interface 인터페이스명 { ... } 상수와 메소드만을 필드 값으로 가질 수 있다. 객체로 생성할 수 없으므로 생성자를 가질 수 없다. 자바 8부터는 default 메소드와 static 메소드 선언이 가능하다. 각각의 특성들은 생략하더라도 컴파일 과정에서 자동으로 붙게 된다. inteface Sample { // 상수 // 추상 메소드 // default 메소드 // static 메소드 } 상수 필드 (Constant Field) 인터페이스는 런타임 시 데이터를 저장할 수 있는 필드를 선언할 수 없다. 상수를 선언할 때에는 반드시 초기값을 정의해줘야 한다. public static final 타입으로 선언한다. 인.. 2021. 3. 30. 추상 클래스 (Abstract Class) 추상 클래스 객체를 직접 생성할 수 있는 클래스들의 공통적인 특성을 추출해 선언한 클래스를 말한다. 추상 클래스와 실체 클래스는 상속의 관계를 지닌다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현된다. 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성(필드, 메소드)을 지닐 수 있다. 실체 클래스의 공통되는 필드와 메소드를 추출해 만들어졌으므로 new 연산자를 통해 인스턴스를 생성시키지 못한다. 추상 클래스는 새로운 실체 클래스를 만들기 위한 부모 클래스로만 사용된다. 추상 클래스를 만드는 이유는 무엇일까? 실체 클래스들의 공통된 필드와 메소드의 이름 통일 실체 클래스 작성 시간 절약 추상 클래스 선언 public abstract class 클래스 { // 필드 // 생성자 // .. 2021. 3. 30. Array와 Collection Framework의 차이는?! Java를 사용하는 개발자라면 한 번쯤은 배열과 컬렉션 프레임워크의 차이에 대해 알아봤을 것이다. 혹여나 아직 이 둘의 차이에 대해 모르는 분들을 위해 간단하게 Array와 Collection Framework의 차이를 알아보자. 1. Array의 특징 자료형이 동일해야 한다. 크기가 고정된다. index를 통한 검색이 용이하다. 연속적이기 때문에 메모리 관리가 편하다. (주소값이 연속적이다.) 데이터의 추가, 삭제가 번거롭다. index의 위치에 새로운 데이터를 추가하는 경우, index ~ 마지막 요소위치까지 한 칸씩 뒤로 이동시켜줘야 한다. 반대로 삭제 시에는 index + 1 ~ 마지막 요소를 앞으로 한 칸씩 이동시켜줘야 한다. 2. Collection Framework의 특징 자료형이 동일해야하.. 2021. 3. 26. Exception, 개발자의 숙명! 예외란? 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 발생하는 프로그램 오류를 말한다. 예외의 종류 일반 예외 (Exception) 실행 예외 (RuntimeException) - 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문에 컴파일러 체크 예외라고도 한다. - 예외 처리 코드가 없다면, 컴파일 오류가 발생한다. - Exception 클래스를 상속받지만 RuntimeException을 상속받지 않는 클래스들이다. - 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다. - RuntimeException을 상속받은 클래스들이다. - 자바 컴파일러가 체크를 하지 않기 때문에, 개발자의 경험에 의해서 예외 처리 코드를 삽입해야 한다. # ClassNotFoun.. 2021. 3. 24. 객체 지향 프로그래밍 OOP(Object Oriented Programming) 란? 객체 지향 프로그래밍(OOP)이란? 프로그램을 개발하는 기법으로, 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립하고 연결해 전체 프로그램을 완성하는 기법이다. 객체 지향 프로그래밍의 장점은? 코드의 재사용이 가능하다. 한번 만든 클래스는 상속을 통해 확장할 수 있다. 유지보수가 쉽다. 객체 지향 언어의 경우, 수정해야 하는 부분은 클래스 내부에 멤버 변수와 메소드에 존재하므로 유지보수를 하기 쉽다. 객체 지향 프로그래밍의 단점은? 객체가 많아질수록 프로그램의 용량이 커지게 된다. 상대적으로 처리 속도가 느리다. 객체 지향 프로그래밍의 특징 캡슐화 (Encapsulation) 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것을 말한다. 외부 객체는 객체 내부의 구조를 알지 못.. 2021. 3. 17. 이전 1 2 다음