자바

자바

[Java] NIO

IO의 보충제, NIO 자바는 JVM 위에서 작동해서 메모리에 올라간 데이터를 JVM메모리로 카피해오는 과정이 껴있어 직접 운영체제 레벨의 시스템콜을 사용하는 것 보다 느리다. 자바4에 NIO가 출시되고 자바 7에 클래스 설계 및 비동기 채널 등의 업데이트가 이루어진 NIO 2.0가 NIO의 하위 패키지에 포함된다. IO와 NIO의 차이점 Stream vs Channel IO 입력, 출력을 위해 각각의 Stream을 만들고 1바이트씩 처리하는 Stream 기반 NIO 채널 기반으로 하나의 채널로 양방향 입출력이 가능 Non-Buffer vs Buffer IO 1바이트 쓰기와 읽기의 조합으로 데이터를 주고 받음, 보조 스트림인 BufferedStream을 연결해서 사용하기도 함 NIO 버퍼를 사용해 복수개..

자바

[Java] Thread

스레드란 ? 컴퓨터 세계에서 동시에 여러가지 일을 병행해서 하는 멀티태스킹은 프로세스 기반과 스레드 기반 두 가지 유형으로 나뉜다.프로세스 기반의 멀티 태스킹은 미디어 프로그램 , 인터넷 브라우저, 메신저 프로그램 등을 동시에 실행하는 작업이고 프로세스 기반의 멀티태스킹에서는 병행처리 단위가 프로세스 이다.스레드 기반의 멀티 태스킹은 하나의 프로세스 내에서 여러 작업을 병행하는 것이고 워드 사용시 문서 편집과 동시에 프린트 작업을 할 수 있는데 하나의 프로그램 내에서 동시에 실행되는 작업 단위는 스레드라고 한다. 프로세스 기반 프로세스가 생성될 때마다 새로운 메모리 영역을 할당받고 프로세스 실행에 필요한 시스템 자원 또한 새롭게 할당 받음 스레드 기반 하나의 프로그램 내에서 병행되기 때문에 프로세스에서 ..

자바

[Java] 자바의 직렬화, 역직렬화

프로젝트를 진행하며 자바와 외부 API의 소통을 하려면 자바에서 사용하는 객체를 전송하는게 아닌 API서버에서 원하는 정보를 보내줘야한다. 그러면 객체를 자바 외부로 전송하려면 어떻게 해야할까? Java I/O처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체의 내용을 네트워크 상으로 전송하기 위해서는 변환처리가 필요한데(Object - > byte) 이를 직렬화라고 한다. 역직렬화는 변환된 바이트 형태를 다시 객체로 변환 시키는 것이다. 시스템 적으로 본다면 JVM의 힙, 스택 메모리에 있는 클래스 인스턴스를 바이트 형태로 변환하는 것이 직렬화이고, 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM에 올리는 것을 역직렬화라고 한다. 자바 직렬화의 조건 Primitive 타입이..

자바

[Java] Generic

JDK 5부터 제공되는 제네릭은 소스에서 데이터 타입을 프로그래밍할 때 결정하는 것이 아니고 실행할 때 결정하게 하는 기능으로, 매개변수 타입이라고도 한다. 제네릭이란 ? 다음 그림처럼 가방에 책, 연필통, 노트를 담는 작업을 자바로 구현한다고 가정한다. class Bag{ Book book; Pecil pencil; } class Book{} class Pencil{} Bag에 객체를 담는 작업은 자바에서 "has a"관계로 표현하고 이는 필드 선언으로 나타낸다. 만약 가방에 책만 들어가면 연필은 사용하지 않으므로 메모리를 낭비하는 코드가 된다. 이런 문제점을 해결하기 위한 방법이 제네릭으로 데이터 타입을 매개변수로 지정하는 것을 의미한다. 타입 매개변수는 실행 시 인자로 전달하는 타입을 변수의 타입으..

자바

[Java] GC, Garbage Collector

자바를 사용하면 메모리 해제를 가비지 컬렉터가 해준다고 알고 있긴하지만 정확히 언제, 어떻게 되는지에 대해서까지 알지는 못했다. 힙에 올라간 인스턴스를 해제하는 거긴할텐데... 어떻게 안쓰는지 확인하고 해제되는지 알아보도록 하자. Garbage 판단 GC는 객체를 유효한 참조가 존재하면 Reachable, 참조가 없다면 Unreachable로 구분한다. 이 상태는 Root Set(Stack, Method, Native Stack)과 참조 관계로 판단한다. 방금 설명한 Root Set과 Reachable 유무로 Garbage Collector의 작동원리를 설명하면 1. Root Set으로부터 Heap 영역으로의 참조가 있는 Reachable 객체를 찾는다 > Mark 2. UnReachable객체를 Hea..

자바

[Java] 리플렉션 API

공부한 내용 정리한 포스팅입니다. 틀린내용 피드백 언제든 부탁드립니다. 리플렉션 API? 요약하자면 1. 실행중인 자바 프로그램이 자체적으로 검사하거나 프로그램 내부의 속성을 조작할 수 있기 해주는 API 2. 리플렉션을 사용하면 동적으로 로드되는 Class의 속성을 가져와서 사용한다. 3. 다른 언어에 없는 기능이다. Class Class 1. Class의 인스턴스는 실행중인 Java 애플리케이션의 클래스 및 인터페이스를 나타낸다. 2. 생성자는 없지만 클래스가 로드되고 define Class Loade의 메소드 호출에 따라 JVM에 의해 자동으로 생성된다. 런타임에서 활용할수 있는 방법은 세가지다. 1. 클래스.class 2. Class.forname(className, true, currentLoa..

자바

[Java] JVM 이해하기

JVM이란 무엇인가? 알아보자 자바 프로그램 실행순서는? public class Main { public static void main(String[] args){ } } 클래스를 IntelliJ나 Eclipse로 만들면 생성되는 Main 클래스와 그 안의 mian 메서드를 많이 봤을 것이다. IDE에서 코드를 작성하고 Run 버튼을 누르면 콘솔창에는 결과가 나왔는데 그 안에는 아래와 같은 과정들이 포함돼있다. 소스코드를 자바 컴파일러로 컴파일한다.(.java -> .class) JVM에 컴파일된 바이트 코드를 넣는다 JVM은 바이트코드를 읽어 OS가 실행할 수 있는 네이티브 코드로 변환 및 실행한다. JVM은 컴파일된 바이트코드를 읽어와 OS에 맞는 특화된 코드로 변환 및 실행하는 프로그램이다. 소스코..

자바

[UML] 유스케이스

유스케이스란? 시스템에서 제공해야하는 기능이나 서비스를 명세한 다이어그램으로 사용자와 시스템 사이의 상호 작용에 집중해 도식화 시킨다. 내부 기능보다는 외부에서 본 시스템의 기능을 표현해 사용자가 수행하는 기능을 파악하고 싶을 때 작성한다. 일단 바로 작성한 게시판 유스케이스를 보겠다. 유스케이스 작성 draw io에서 diagram.net 으로 바뀐 사이트에서 다양한 다이어그램을 위한 서비스를 제공하고 깃허브와 연동해 커밋까지 날려줘서 이용하게 됐다. 게시판 서비스 외부의 사용자와 DB는 액터고 게시판 서비스 내부의 시스템들의 기능은 유스케이스라고 한다. 액터 프라이머리 액터는 시스템을 사용하는 액터로 대체로 보통 외부 객체가 사람일 때를 말하며 사람모양으로 시스템의 왼쪽에 위치한다. 세컨더리 액터는 ..

비오베베
'자바' 카테고리의 글 목록 (2 Page)