복사는 정보나 물건을 복제하거나, 같은 것을 두 장 겹쳐서 쓰는 것을 일컫는 용어이다 얕은 복사, 깊은 복사 이전에 상식적인 의미인 복사라고 알면 됩니다. 얕은 복사(shallow copy)는 heap영역에 존재하는 reference type의 값 주소를 복사하는 것이고 깊은 복사(deep copy)는 heap영역에 존재하는 reference type의 값 자체를 복사하는 것입니다. (stack, heap영역의 primtive type 값은 무조건 데이터를 복사해서 새로 할당한다고 생각합니다.) primitive type은 데이터 자체를 복사하여 새로 할당하지만 reference type의 경우 얕은 복사, 깊은 복사 모두를 고려해야 합니다. 사용방식에 따라 메모리 주소와 데이터중 어떤 것을 사용할지 변..
람다식은 기본적으로 함수형 인터페이스를 표현합니다. 보통 함수형 인터페이스는 1개의 추상 메서드만 포함하는 인터페이스를 뜻합니다. 람다식은 Java8에 추가되었으며 아래와 같은 기능을 제공합니다. 1. 기능을 인수로 다룰수있으며 코드를 데이터로 처리할 수 있습니다. 2. 클래스에 속하지 않는 메서드를 만들 수 있습니다. 3. 람다식은 객체인 것 처럼 전달될 수 있으며 요청 시 실행될 수 있습니다. 람다 따라해보기 Comparator를 익명 클래스와 람다식을 이용하여 구현한 것의 차이입니다. 익명 클래스 방식에 비해 굉장히 간결해졌습니다. 이제 람다식을 사용하여 1개의 기능을 만들어보겠습니다. interface에 body가 없는 abstract method를 1개 정의합니다. "함수형 인터페이스를 정의한다..
Java 플랫폼에는 컬렉션 프레임워크가 포함되어있습니다. 컬렉션 프레임워크는 컬렉션을 표현하고 조작하기 위한 통합 아키텍처입니다. 그리고 모든 컬렉션 클래스와 인터페이스가 JDK 1.2에 정의되어있습니다. Collection Interface 그리고 Map Interface는 java Collection framework의 기본이 되는 interface입니다. Collection Framework 이점 1. 일관된 API를 가집니다. Collection interface를 상속받는 클래스들은 통일된 기능을 사용하여 효율성을 증대시킵니다. 구현체(Vector, ArrayList)들이 Collection, Set, List, Map과 같은 공통 인터페이스를 사용합니다. 2. 프로그램 속도 및 성능 향상, 유..
타입 파라미터가 없는 제네릭 타입 타입 파라미터를 사용하지 않으면 compile단계에서 막을수 없는 코드가 나올 수 있습니다. 아래의 3가지 경우에는 rawType의 사용으로 런타임시점에 ClassCastException이 발생되는 경우입니다. 에러의 경우 될수있으면 런타임시점에서 컴파일시점으로 끌고오는게정신건강에 좋습니다. 1번째 경우 2번째 경우 3번째 경우 안전하지 못한 방식을 왜 허용해주냐하면 Java5 이전 코드와의 호환성 때문입니다. type parameter가 적용된 코드를 raw type형식의 코드(java5 이전)와 함께 사용하기 위해서입니다. 그래서 generic에서는 type erasure를 통해 컴파일 후 바이트코드에서 제네릭의 존재가 사라집니다.(추측)
Java5부터 버그를 줄이고 유형에 대한 추가 추상화 계층을 추가하기 위해 도입되었습니다. Generic의 필요성 Integer를 넣었으니 당연히 Integer Type을 반환하지 않을까? 하지만 IDE에서 미리 언질을 줍니다. ## 아마 IDE에 "어떤 환경 구성"에서 프로그램을 작성하는지 설정을 해줘야 할 듯합니다. ## Object Type을 제공하는데 Integer Type이 필요하다고 말합니다. 명시적으로 캐스팅하여 해결을 할수는 있지만 안전한 방법은 아닙니다. 해당 List는 Object Type을 넣을 수 있기 때문에 작성자가 Integer Type을 넣을 것이라는 보장이 없습니다. ☠️Runtime 시점에 에러를 발견하는 경우가 생길 수 있습니다. 작성자가 특정 유형을 사용하려는 의도를 표..
Java NIO는 기존 IO API와는 다른 IO 프로그래밍 모델을 제공합니다. Non-Blocking NIO를 사용하면 Non-blocking IO를 수행할 수 있습니다. 하지만 NIO를 사용한다고 해서 완벽하게 Non-blocking방식을 사용이 가능하다고 할 수 없습니다. 스레드가 버퍼로 데이터를 읽어오라고 채널에 요청합니다. 채널이 버퍼로 데이터를 읽는 동안 스레드는 다른작업을 수행할 수 있습니다. Channels and Buffers 표준 IO API는 바이트 스트림, 문자 스트림으로 작업을 하며 NIO API는 채널과 버퍼로 작업합니다. Selectors 연결알림, 데이터 도착등 이벤트에 대해 모니터링 하는 개체입니다. 단일 스레드가 여러 채널의 데이터를 모니터링이 가능해집니다. NIO의 중심..
Buffer라는 개념은 일반적으로 데이터를 제공하는 곳과 제공받는 곳의 성능의 차이를 매꾸기위해 사용되며 한가지의 예로 저속장치가 작업을 처리하는 동안 고속장치가 기다리는 현상이 줄어듭니다. 저속의 장치의 작업을 기다려야 할 경우 만약 프린터의 성능을 저속 컴퓨터의 성능을 고속이라고 가정하면 프린터의 작업이 끝날때까지 컴퓨터를 사용할 수 없습니다. 또한 I/O요청이 줄어드는 결과가 생깁니다. I/O란? Input(입력)과 Output(출력)의 약자입니다. 컴퓨터 외부(Keyboard, Mouse)또는 내부(HDD, SSD)와 데이터를 서로 주고 받는 것 BufferInputStream? 보조스트림인 BufferInputStream을 사용해보기 BufferInputStream이 생성되면 내부 버퍼배열(기본..
Stream 연속적인 데이터의 흐름을 의미 Java 응용프로그램과 입출력 장치를 연결해줍니다. Java 응용프로그램은 입출력 Stream하고만 연결, Stream이 입출력에 관한 System call을 합니다. 1. 단방향이며 입력과 출력이 정해져있다. 입력스트림은 입력장치만 제어 출력스트림은 출력장치만 제어 2. 선입선출 구조 3. Java의 Stream은 바이트, 문자로 구분 바이트스트림은 바이트단위로 데이터를 다룹니다. 스트림에 들어오고 나가는 데이터를 바이너리로 다루기때문에 모든형식의 데이터를 취급이 가능합니다. 문자스트림은 2byte 유니코드 문자단위로 데이터를 다룹니다. 문자가 아닌정보들은 다룰수없는 특징이 있습니다. Java Stream의 동작 🌊 InputStream Byte기반 입력 최상..
- Total
- Today
- Yesterday
- 프로그래머
- 스타트업
- jdk11
- springboot
- 스택
- 자바
- 백준 제로 자바
- JPA
- Spring
- 코딩테스트
- mappedby
- 백준
- 알고리즘
- jre11
- JDK
- 백준 제로
- 자사서비스
- jre
- java8
- 관계설정
- jvm
- JDK8
- 다대일
- 백엔드
- jre8
- 개발자채용
- boot
- ㅃ
- 문제
- boot 일대다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |