본문 바로가기

728x90

분류 전체보기

(130)
자바의 직렬화 (Serialization) 직렬화란, 객체를 데이터 스트림으로 만드는 것입니다. 객체에 저장된 데이터를 스트림에 쓰기(write) 위해 연속적인(serial) 데이터로 변환하는 것입니다. 반대로, 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization)라고 합니다. 객체를 저장한다는 것은, 객체의 모든 인스턴스변수의 값을 저장한다는 것을 의미합니다. 그리고, 저장했던 객체를 다시 생성하려면, 객체를 생성한 후에 저장했던 값을 읽어서 생성한 객체의 인스턴스변수에 저장하면 됩니다. 인스턴스변수가 단순한 기본형일 때는 인스턴스변수의 값을 저장하는 일은 간단합니다. 하지만, 인스턴스변수의 타입이 참조형일 때는 그냥 저장할 수가 없습니다. 이러한 변수를 저장하기 위해서 자바에서는 ObjectInputStre..
자바에서의 입출력 - 2 (Reader/Writer) 저번 포스팅(자바의 입출력 -1)에서는 바이트 기반의 스트림들을 알아보았습니다. 바이트기반 스트림은 입출력의 단위가 1byte입니다. 하지만 한글과 같은 2 byte형 문자를 표현하기에는 바이트기반 스트림에서 한계가 있었습니다. 이 점을 보완하기 위한 문자기반의 스트림에 대해서 이번 포스팅에서 알아보도록 하겠습니다. (문자데이터를 다루는데 사용된다는 것을 제외하고는 바이트기반 스트림과 사용방법이 거의 같기 때문에 기본적인 메서드에 대해서만 설명하고 넘어가도록 하겠습니다. 만약 바이트기반 스트림과 보조 스트림에 대해서 생소하시면 자바의 입출력 - 1 포스팅부터 보시는 것을 추천드립니다!) 자유로운 피드백은 환영입니다!! 바이트기반 스트림 VS 문자기반 스트림 바이트기반 스트림과 문자기반 스트림은 이름만 조..
자바에서의 입출력 - 1(InputStream/OutputStream) 이번 포스팅은 자바에서의 I/O (Input과 Output)에 대해서 작성했습니다. 자유로운 피드백은 환영입니다!! 스트림 자바에서 입출력을 수행하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 스트림(Stream)이라는 것이 필요합니다. 즉, 스트림이란 데이터를 운반하는 데 사용되는 연결통로라고 할 수 있습니다. 스트림 종류 스트림은 단방향 통신만 가능하므로, 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없습니다. 따라서, 입출력을 동시에 수행하려면 입력스트림(InputStream)과 출력스트림(OutputStream)이 모두 필요합니다. 바이트기반 스트림 아래와 같은 바이트 기반스트림은 바이트단위로 데이터를 전송하며, 입출력 대상에 따라 아래 종류의 입출력 스트림이 있습니다. 이들은 모두 I..
Networking (네트워킹): IP주소와 URL IP주소 컴퓨터(호스트)를 구별하는 주소: 4byte = 32 bit IP 주소는 네트워크 주소와 호스트 주소로 나뉩니다. IP 주소의 네트워크 주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미합니다. IP주소와 서브넷 마스크를 비트 연산자 '&'로 연산하면 IP주소에서 네트워크 주소만 뽑아낼 수 있습니다. 즉, 서로 다른 두 호스트의 IP 주소를 서브넷 마스크로 '&' 연산을 수행해서 비교하면 두 호스트가 같은 네트워크 상에 존재하는지 확인할 수 있습니다. 메서드 종류 byte[] getAddress(): IP 주소를 byte 배열로 반환 static InetAddress [] getAllByName(String host): 도메인명(host)에 지정된 모든 호스트의 IP주소를..
자바의 스트림(stream) 많은 수의 데이터를 다룰 때, 보통 컬렉션이나 배열에 데이터를 저장한 후 for문과 Iterator를 이용해서 데이터에 접근할 수 있었습니다. 하지만, 이렇게 작성한 코드는 너무 길기도 하고 재사용성도 떨어진다는 단점이 있습니다. 또한, Colletions.sort()와 Arrays.sort()와 같이 각 컬렉션 클래스에는 같은 기능의 메서드들이 중복해서 정의되어 있는 단점이 있습니다. 즉, 데이터 소스마다 다른 방식으로 다루어야 한다는 점이 불편한 점입니다. 이러한 문제점들을 해결할 수 있는 자료구조가스트림(Stream)입니다. 이번 포스팅은 이 스트림에 관해서 다루어 보았습니다. (날카로운 피드백은 환영입니다~!!) 스트림이란? 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서..
자바의 람다(Lambda) 자바에서 JDK1.8부터 람다식(lambda expression)을 도입함으로써, 객체지향언어였던 자바가 동시에 함수형 언어가 되었습니다. 이번 포스팅은 람다식에 관해서 작성하였습니다. 람다식이란? 메서드를 하나의 식(expression)으로 표현한 것입니다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지게 됩니다. 그래서 람다식을 '익명 함수(anonymous function)'라고도 합니다. 람다식은 메서드를 변형한 형태이지만, 변수처럼 다룰 수 있습니다. 즉, 메서드의 매개변수로 전달되는 것도 가능하고, 메서드의 결과로 반환될 수도 있습니다. 람다식의 형태 람다식은 아래와 같이 메서드를 식(expression)으로 바꿀 수 있습니다. 메서드: 반환타입 메서드이름(매개변수 리스트) { ..
volatile 키워드 자바 코드를 보면 특정 변수 앞에 volatile이라는 키워드가 붙어져 있는 경우를 볼 수 있습니다. volatile 키워드가 무엇이고 왜 사용되는지에 대해서 해당 포스팅을 작성하였습니다. 자유롭게 피드백해 주시면 감사하겠습니다!! volatile 키워드 필요한 이유 먼저, volatile 키워드가 무엇인지에 대하여 설명하기 전에 왜 volatile 키워드가 필요한지 그 배경에 대해서 알아보겠습니다. 싱글 코어 프로세서가 장착된 컴퓨터가 아닌, 멀티 코어 프로세서로 돌아가는 컴퓨터에서는 코어마다 별도의 캐시를 가지고 있습니다. 코어는 메모리에서 어떤 값을 읽어와서 캐시에 저장한 후, 캐시에서 값을 읽어서 작업합니다. 해당 값이 필요할 때 우선 캐시에 값이 저장되어 있는지 확인한 후, 없으면 메모리에서 값..
Lock과 Condition (await()과 signal(),signalAll()) synchronized 블록으로 동기화를 구현하면 원하는 쓰레드를 선택해서 notify()를 할 수 없어 경쟁상태(race condition)와 기아상태(starvation)가 발생할 수 있습니다. 해당 내용은 아래 포스팅에서 확인하실 수 있습니다! https://silver-programmer.tistory.com/entry/wait%EA%B3%BC-notify-notifyAll wait()과 notify(), notifyAll() 멀티 쓰레드로 구성된 프로세스에서 임계 영역을 보호하기 위해, 즉 쓰레드의 동기화를 위해 synchronized 키워드를 활용합니다. 혹시 synchronized에 대해서 개념을 알고 싶으신 분들은 아래 포스팅을 silver-programmer.tistory.com 이 때 ..

728x90
반응형