본문 바로가기

# 02/Java

[Java] 코딩테스트용 java 기본 문법 정리 /// substring String a = "abcde"; String b = a.substring(2); //cde String c = a.substring(0, 2); //ab String d = a.substring(1, 2); //b String e = a.substring(1, 3); //bc /// list char[] chars = {'a', 'b'}; chars[0] = 'c'; int length = chars.length; /// arrayList ArrayList pitches = new ArrayList(); pitches.add("138"); pitches.add("129"); pitches.add("142"); System.out.println(pitches.get(1)); /..
[Java] 자바 메모리 구조 Method Area (Static Area), Stack, Heap Method Area (Static Area) JVM이 구동될 때 생성되며 모든 스레드가 공유하는 영역. JVM 구동 중 사용될 클래스 파일을 읽고 클래스 별로 runtime constant pool(런타임 상수 풀), file data(필드 데이터), method data(메서드 데이터), constructor(생성자) 등을 저장 1. 필드 정보 : 멤버변수 이름, 데이터 타입, 접근 제어자 등의 정보2. 메서드 정보 : 메서드 이름, 리턴타입, 매개변수, 접근제어자 등의 정보3. 상수 풀(String Constant Pool)- Type에서 사용된 상수를 저장하는 곳(중복이 있을 시 기존의 상수 사용)- 문자 상수, 타입, 필드, ..
[Java] RxJava 세미나 보호되어 있는 글입니다.
[윤성우 열혈자바] 34-3. 쓰레드를 생성하는 더 좋은 방법 쓰레드 풀 모델 쓰레드의 생성과 소멸은 리소스 소모가 많은 작업이다. 그런데 쓰레드 풀은 쓰레드의 재활용을 위한 모델이다. 쓰레드 풀 기반의 예제 1 class ExecutorsDemo { public static void main(String[] args) { Runnable task = () -> { // 쓰레드에게 시킬 작업 - Runnable 구현한 인스턴스 생성 int n1 = 10; int n2 = 20; String name = Thread.currentThread().getName(); System.out.println(name + ": " + (n1 + n2)); }; ExecutorService exr = Executors.newSingleThreadExecutor(); exr.subm..
[윤성우 열혈자바] 34-2. 쓰레드의 동기화 쓰레드의 메모리 접근 방식과 그에 따른 문제점 class Counter { int count = 0; // 공유되는 변수 public void increment() { count++; // 첫 번째 쓰레드에 의해 실행 } public void decrement() { count--; // 또 다른 쓰레드에 의해 실행 } public int getCount() { return count; }} class MutualAccess { public static Counter cnt = new Counter(); public static void main(String[] args) throws InterruptedException { Runnable task1 = () -> { for(int i = 0; i < ..
[윤성우 열혈자바] 34-1. 쓰레드의 이해와 쓰레드의 생성 실행중인 프로그램 - 프로세스프로세스의 단위 - 쓰레드메인 메소드는 자동으로 실행되는 메인 쓰레드 쓰레드의 이해와 쓰레드의 생성 방법 쓰레드 프로그램 내에서 실행의 흐름을 이루는 최소의 단위 main 메소드의 실행도 하나의 쓰레드에 의해 진행이 된다. class CurrentThreadName { public static void main(String[] args) { Thread ct = Thread.currentThread(); // 현재 진행중인 쓰레드 정보가 담김 String name = ct.getName(); // 쓰레드의 이름을 반환 System.out.println(name); }} main 쓰레드를 생성하는 방법 public static void main(String[] args) { R..
[윤성우 열혈자바] 33-3. NIO 기반의 입출력 I/O 스트림의 성능을 보완하기 위해 채널과 버퍼가 나옴!I/O는 왜 느릴까?구조적인 문제 - 가상머신에서 작동하기 때문앱에서 자바가상머신을 거쳐 O/S를 거쳐 하드웨어를 거쳐 파일까지 도달극복하기 위해 가상머신을 거치지 않고 다이렉트로 O/S에 전달 (채널, 버퍼)I/O에 성능이 문제되지 않는 상황이 훨씬 많기 때문에 무조건 채널과 버퍼를 사용할 필요는 없음! NIO의 채널(Channel)과 버퍼(Buffer) 스트림과 채널의 공통점 “스트림도 채널도 데이터의 입력 및 출력을 위한 통로가 된다." 스트림과 채널의 차이점 “스트림은 한 방향으로만 데이터가 이동하지만 채널은 양방향으로 데이터 이동이 가능하다." 채널에만 존재하는 제약사항 “채널은 반드시 버퍼에 연결해서 사용해야 한다."채널과 버퍼는 독립적..
[윤성우 열혈자바] 33-2. NIO.2 기반의 I/O 스트림 생성 I/O 스트림 생성이 복잡하다는 평이 있어서 일부를 대체하기 위해 NIO.2 가 나옴. 바이트 스트림의 생성 (NIO.2 기반) - 32챕터 일부 변경됨! public static void main(String[] args) { Path fp = Paths.get("data.dat"); try(DataOutputStream out = new DataOutputStream(Files.newOutputStream(fp))) { out.writeInt(370); out.writeDouble(3.14); } catch(IOException e) { e.printStackTrace(); }} public static void main(String[] args) { Path fp = Paths.get("data.d..