본문 바로가기

JAVA17

Concrete class == 구상클래스, 구현클래스, 구체클래스?? Concrete class 객체지향 관련 서적을 보다 보면 원서에는 concrete class라고 되어있는 것이, 번역서에는 '구상 클래스', '구현 클래스' 또는 '구체 클래스'라고 번역되어 있습니다. 이 이름을 보고 나서 이게 구체적으로 어떤 클래스를 의미하는 것인지 크게 와닿지 않아 정리합니다. 정리 정의한 모든 연산(operation)이나 일부 연산의 구현을 서브클래스로 넘기는 추상 클래스(abstract class)나 객체의 연산에 대한 구현이 포함되어 있지 않고 정의만 존재하는 인터페이스를 통해 인스턴스를 만들 수 없습니다. 당연하게도 완성되지 않은 설계도를 가지고 제품을 만들 수는 없기 때문입니다. 모든 연산에 대한 구현을 가지고 있는 클래스를 뭐라고 할까? 바로 concrete class .. 2019. 10. 18.
Java - Comparable, Comparator Java Comparable, Comparator "caAbBC"와 같은 알파벳 문자열을 "aAbBcC"와 같은 알파벳 순서로 정렬하는 코드를 작성하려면 어떻게 해야할까요 ? 위 문제를 위한 코드를 자바로 작성한다면, 아마도 정렬을 실실하는 코드를 작성하되 그 안에서 문자들에 대한 비교 연산을 새로 정의하는 형태로 작성해야 할 것입니다. 위 문제에 핵심은 '비교연산' 을 구현하는데에 있습니다. 그냥 단순히 문자열을 char 배열로 바꾸고 각 char 형으로 정렬하고자 한다면 비교하는데 쓰이는 값이 ASCII값이므로 자연율로 정렬해버리게됩니다. ABCDabcd와 같은 형태가 되겠죠 위처럼 자연율(일반적인 정렬순서)가 아니라 사용자가 새롭게 정렬 순서를 정의하고 싶거나 오브젝트를 정렬할 때 오브젝트 정렬에 .. 2019. 10. 15.
Java 8 - More Functional Interface!! Java 8 - More Functional Interface 이전 포스트에서 functional Interfcae에 대하여 알아보았었습니다. 이전 포스트 보러 가기 - https://beomseok95.tistory.com/277 Java 8 - Function Interface Java 8 - Function Interface Java SDK 8의 java.util.function 패키지에는 수많은 Functional Interface들이 등록되어 있습니다. 이 패키지에 등록되어 있는 모든 인터페이스들은 @FunctionalInterface로 지정되.. beomseok95.tistory.com 이번 글에서는 더 자세히 Functional Interface에 대하여 파보도록 하겠습니다.(이전포스트과 겹.. 2019. 10. 13.
Java 8 - Function Interface Java 8 - Function Interface Java SDK 8의 java.util.function 패키지에는 수많은 Functional Interface들이 등록되어 있습니다. 이 패키지에 등록되어 있는 모든 인터페이스들은 @FunctionalInterface로 지정되어 있으며 API 문서에는 다음과 같은 설명이 추가되어 있습니다. This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference. 이것은 Functional Interface이며 그러므로 람다식이나 메서드 레퍼런스를 위한 할당 대상으로 사용될 수 있습니다. Functiona.. 2019. 10. 13.
Java 8 - Interface바뀐점을 알아보기 Java 8 - Interface바뀐점을 알아보기 Java 8부터 interface에 많은 변화가 생겼는데 java 8이 처음 출시된 것은 2014년 3월 18일입니다. Lamda 표현식, Stream API, Optional , Completable 등의 여러 가지가 추가되었지만 이글에서는 interface의 변경점에 대하여 알아보도록 하겠습니다. Java 8의 변경점 - 인터페이스가 가질 수 있는 것들 1.1 상수 필드(public static final) public interface Parent{ public static final MAX_VALUE = 100; public static final MIN_VALUE = 0; } 1.2 추상 메서드(public abstract) public inte.. 2019. 10. 11.
equals,hashCode 알아보기 equals,hashCode 알아보기 equals메소드와 hashcode메소드는 Object 클래스의 메소드입니다. Object는 상속 관계상 가장 위에 있기 때문에 (모든 클래스가 Object를 상속) 어떤 객체라도 Object의 메소드인 equals와 hashcode를 사용할 수 있게 됩니다. ex) equals ,hashcode 출력해보기 Object object1 = new Object(); Object object2 = new Object(); Object object3 = new Object(); Object object4 = new Object(); println("object1.equals(object2) result is " + object1.equals(object2)); println.. 2019. 10. 1.
Lombok 알아보기 Lombok 알아보기 Lombok이란?? - Java의 전형적인 Boilerplate code들을 없애주는 Annotation기반 라이브러리입니다. - @Getter와 @Setter, @ToString 만으로도 강력합니다. Lombok프로젝트에 추가하기 1. build.gradle(app)의 dependencies에 아래와 같이 추가 compileOnly 'org.projectlombok:lombok:1.18.10' annotationProcessor "org.projectlombok:lombok:1.18.10" //require for anotation compileOnly 'org.glassfish:javax.annotation:10.0-b28' // package javax.annotation do.. 2019. 9. 15.
boilerplate boilerplate code란? github에 오픈소스를 검색하다보면 boilerplate라는 용어를 많이 접할 수 있습니다. boilerplate란 표준 문안이라는 뜻의 단어로 프로그래밍에서의 boilerplate code는 위키피디아의 설명을 보면 - 최소한의 변경으로 재사용할 수 있는 것 - 적은 수정만으로 여러 곳에 활용 가능한 코드, 문구 - 각종 문서에서 반복적으로 인용되는 문서의 한 부분 라고 설명되어있습니다. javaScript나 html에서의 보일러플레이트라고 하면 보통 크로스 브라우징과 호환성을 위한 Modernizr, polyfill, Normalize 등이 적용되어 있는 템플릿 같은 형태로 많이 사용됩니다.(어떻게보면 seed project와 비슷하다.) 반복되지만 자주쓰이는 형태.. 2019. 9. 15.
Java - Atomic변수 Java - Atomic변수 Atomic변수란 atomic변수는 원자성을 보장하는 변수입니다 . 멀티쓰레드 환경에서 동기화 문제를 synchronized 키워드를 사용하여 , 락을걸곤하는데 이런 키워드 없이 동기화문제를 해결하기 위해 고안된 방법입니다. (일반적으로 동기화문제는 synchronzied, Atomic, volatile 세가지 키워드로 해결합니다) synchronized는 특정 Thead가 해당 블럭 전체를 lock을 하기떄문에 다른 Thread는 아무런 작업을 하지 못하고 기다리는 상황이 될수 있기때문에 , 낭비가 심합니다. 그래서 NonBlocking하면서 동기화 문제를 해결하기 위한 방법이 Atomic입니다. Atomic의 동작 핵심원리는 바로 CAS알고리즘입니다(Compared and.. 2019. 9. 2.
Java - Garbage Collection Java - Garbage Collection Garbage Collection 이란 ? 프로그래머는 힙을 사용할 수 있는 만큼 자유롭게 사용하고, 더 이상 사용되지 않는 인스턴스(쓰레기객체)들은 가비지 컬렉션을 담당하는 프로레스가 자동으로 메모리에서 제거하도록 하는 것이 가비지 컬렉션의 기본이다. 프로그램을 실행하다가 메모리가 부족해져 메모리가 더 필요해지는 시점에 실행됩니다. GC와 Reachability Java GC는 객체가 가비지인지 판별하기 위해서 reachability라는 개념을 사용합니다. 어떤 객체에 유효한 참조가 있으면 'reachable'로, 없으면 'unreachable'로 구별하고, unreachable 객체를 가비지로 간주해 GC를 수행하게됩니다. 한 객체는 여러 다른 객체를 참.. 2019. 9. 2.
Java - JVM Java - JVM 자바가상머신 , JVM(Java Virtual Machine)이란 ?? JVM은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다. JVM은 JAVA와 OS사이의 중개자 역할을 하여 , JAVA가 OS에 의존하지않고 실행될수 있게 한다.(플랫폼에독립적) 그리고 JVM은 메모리관리, Garbage Collection을 수행한다. JVM 은 스택 기반의 가상머신이다. (ARM 등은 레지스터기반으로 동작하는데에 반해) 자바 프로그램 실행 과정 프로그램이 실행되면 JVM은 OS로 부터 이 프로그램이 필요로 하는 메모리를 할당 받는다. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다. 자바 컴파일러(javac)가 자바소스(.java)를 읽어들.. 2019. 9. 2.
Java - 메모리관리 ( 스택& 힙) [펌] Java - 메모리관리 ( 스택& 힙) 출처 -> https://yaboong.github.io/java/2018/05/26/java-memory-management/ 자바 메모리 관리 - 스택 & 힙 개요 Java 에서 메모리 관리는 어떻게 이루어지는지 알아보기 위함. Stack 과 Heap 영역 각 역할에 대해 알아본다. 간단한 코드예제와 함께 실제 코드에서 어떻게 Stack 과 Heap 영역이 사용되는지 살펴본다. Wrapper Class 와 Immutable Object 에 대해서도 살짝 알아본다. Garbage Collection 이 무엇인지도 아주 살짝 알아본다. yaboong.github.io Java 의 Stack 과 Heap Java 메모리 영역중 stack 과 heap 영역이 내가 짠 .. 2019. 9. 1.
Primitive vs Reference Primitive vs Reference 자바의 자료형은 Primitive Type(기본형) 과 Reference Type(참조형)으로 나뉩니다. Java Data Type ㄴ Primitive Type ㄴ Boolean Type(boolean) ㄴ Numeric Type ㄴ Integral Type ㄴ Integer Type(short, int, long) ㄴ Floating Point Type(float, double) ㄴ Character Type(char) ㄴ Reference Type ㄴ Class Type ㄴ Interface Type ㄴ Array Type ㄴ Enum Type ㄴ etc. Primitive Type(기본형) 비객체 타입으로 , Null을 가질 수 없는 형태 Type Bits.. 2019. 9. 1.
Java Stream 결과 만들기 Java Stream 결과 만들기 https://beomseok95.tistory.com/216 Java Stream알아보기 Java Stream JavaStream이란 ? Java8 부터 추가된 기능으로 ,"컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능"입니다. (InputStre.. beomseok95.tistory.com https://beomseok95.tistory.com/217 Java Stream 생성하기 Java Stream 생성하기 1. 생성하기 배열 , 컬렉션, 빈스트림 Stream.builder() , Stream.generate() , Stream.iterate() 기본타입형 , String , 파일스트림.. 2019. 9. 1.
Java Stream 가공하기 Java Stream 가공하기 https://beomseok95.tistory.com/216 Java Stream알아보기 Java Stream JavaStream이란 ? Java8 부터 추가된 기능으로 ,"컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능"입니다. (InputStre.. beomseok95.tistory.com https://beomseok95.tistory.com/217 Java Stream 생성하기 Java Stream 생성하기 1. 생성하기 배열 , 컬렉션, 빈스트림 Stream.builder() , Stream.generate() , Stream.iterate() 기본타입형 , String , 파일스트림 병.. 2019. 9. 1.
Java Stream 생성하기 Java Stream 생성하기 1. 생성하기 배열 , 컬렉션, 빈스트림 Stream.builder() , Stream.generate() , Stream.iterate() 기본타입형 , String , 파일스트림 병렬스트림, 스트림연결하기 배열스트림 , 컬렉션스트림 생성하기 스트림은 배열 또는 컬렉션 인스턴스를 이용하여 생성할 수 있습니다 . Arrays.stream이나 Collection.stream()메소드를 사용합니다. //array String[] arr = new String[]{"a", "b", "c"}; Stream stream = Arrays.stream(arr); Stream streamOfArrayPart = Arrays.stream(arr, 1, 3); // 1~2 요소 [b,c] /.. 2019. 9. 1.
Java Stream알아보기 Java Stream JavaStream이란 ? Java8 부터 추가된 기능으로 ,"컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능"입니다. (InputStream, OutputStream같은 I/O Stream이 아닙니다) Java 8 이전에는 배열또는 컬렉션 인스턴스를 다룰때 for 문 ,foreach문을 돌면서 하나씩 꺼내서 다루어야했었습니다. 이런방법은 로직이 복잡해질수록 양이 많아져 힘들게됩니다. 스트림이란 '데이터의흐름'입니다. 배열 또는 컬렉션 인스턴스에 함수 여러개를 조합하여 원하는 결과를 필터링 하고 가공된 결과를 얻을 수 있습니다. 그리고 람다를 이용하여 코드양을 줄이고 간단하게 표현가능합니다. 한마디로 , 함.. 2019. 9. 1.