거꾸로 바라본 세상
[ES6] Arrows
Language/Javascript 2023. 4. 20. 09:16

[ES6]-Arrows Arrows 함수는 function 키워드 대신 화살표('=>') 를 사용하여 함수를 선언하는 축약형 함수이다. Arrows는 표현식 본문(Expression Bodies)와 상태 블럭 본문(Statement block bodies)를 지원한다. 콜백 함수에서 사용하면 간결하게 표현이 가능. //매개변수 지정 방법 () => {...} // 매개변수가 없는 경우 x => {...} // 매개변수가 한 개인 경우, 소괄호를 생략할 수 있다. (x,y) => {...} //매개변수가 여러 개의 경우, 소괄호를 생략할 수 없다. //함수 몸체의 지정 방법 x => { return x * x} //signle line block x => x * x //함수의 몸체가 한줄구문이라면 중괄호를..

[ES6] Scope 연산자 let, const
Language/Javascript 2023. 4. 20. 09:11

Scope 연산자 let, const 기존 ES6 변수들을 선언할 수 있는 방법은 var 키워드이다. var키워드를 사용할 때 주의를 기울이지 않으면 심각한 문제를 일으킨다. [문제점] Function-level scope(함수레벨 스코프) 함수의 코드 블록만을 스코프로 인정한다. 그러므로 전역함수 외부에서 생성한 변수는 모두 전역 변수이다. 이는 전역변수를 남발할 가능성이 크다. for문 변수 선언문에서 선언한 변수를 블록 외부에서 참조할 수 있다. var 키워드 생량 허용 : 암묵적 전역 변수를 만들어 낼 가능성이 크다. 변수 중복 선언 허용 : 의도하지 않은 변수값의 변경이 일어날 가능성이 크다. 변수 호이스팅 : 변수를 선언하기 이전에 참조할 수 있는 것. 대부분의 문제는 전역변수로 인해 발생한다..

[JS] 호이스팅(Hoisting)
Language/Javascript 2023. 4. 20. 09:06

호이스팅 (Hoisting) 자바스크립트의 인터프리터가 함수선언과 변수선언의 선언들이 속해 있는 스코프의 최상단으로 끌어올릴수 있는 방법에 대한 일종의 비유이다. 이로인해 자바에서 작성했다면 분명히 잘못된 것을 컴파일하면 실패하는 것들이 자바스크립트에서는 전혀 문제가 되지 않은 것을 볼 수 있다. travel = 'No Plan'; var traval; console.log(traval); //undefined function travel() { console.log('Traveling'); } travel(); //TypeError: travel is not a function function workout() { goToGym(); var goToGym = function..

[ES6] 객체 프로퍼티와 프로퍼티 속성
Language/Javascript 2023. 4. 20. 09:05

객체 프로퍼티와 프로퍼티 속성 자바스크립트에서 객체는 논리적인 프로퍼티의 집합이며 속성(Attributes)은 프로퍼티의 상태를 정의하고 설명하는데 사용한다. 프로퍼티의에는 데이터 프로퍼티(Data Property), 접근 프로퍼티(Access Property)가 있다. 데이터 프로퍼티(Data Property) value : 자바스크립트의 모든 자료형 writeable : 데이터 프로퍼티의 변경가능 여부 정의 enumerable : for-in 구분을 이용해 열거 가능 여부 정의 configurable : 제거 가능 여부, 접근 프로퍼티 변경 여부, 쓰기 불가 여부, enumerable 속성의 수정 가능여부 정의 접근 프로퍼티(Access Property) get 접근자(get accessor) : F..

[병렬프로그래밍] 6. 작업실행
Language/Java 2017. 4. 25. 17:40

6. 작업실행 대부분 병렬 어플리케이션은 '작업task'을 실행하는 구조가 효율적으로 구성되어있다.- 작업: 추상적이면서 명확하게 구분된 업무의 단위작업은 원론적으로 완전히 독립적인 동작으로 상태,결과, 부수효과 등에 영향을 받지 않아야함 작업을 실행하는 가장 간단한 방법- 단일 스레드에서 작업 목록을 순차적으로 실행하는 방법 6.1.1 작업을 순차적으로 실행하나의 스레드가 모든 요청을 순차적으로 처리하는 경우class SingleThreadWebServer {public static void main(String[] args) {ServerSocket socket = new ServerSocket(80);while (true) {Socket conn = socket.accept();handleReque..

volatile 키워드
Language/Java 2017. 4. 13. 14:46

volatile 키워드 멀티코어 프로세서는 별도의 캐시를 가지고 있다코어는 메모리에서 읽은 값을 캐시에 저장한다.작업을 처리할 때 캐시에서 먼저 확인하고 없으면 메모리에서 호출하여 처리한다.그러다보니 도중에 메모리에 저장된 변수의 값이 변경되었는데 캐시에 저장된 값이 갱신되지 않아서스레드가 멈추지 않고 계속실행되는 경우가 있다. 그래서 volatile 키워드를 이용할 경우코어는 작업을 처리할 때 캐시가 아닌 메모리에서 불러와 처리하기 때문에캐시와 메모리간의 불일치 문제가 해결된다. 변수에 volatile 키워드를 붙이는 대신 synchronized 블록을 이용할 때도 같은 효과를 얻을 수 있다. 스레드가 synchronized 블럭으로 진입할 때와 나올 때, 캐시와 메모리간의 동기화가 이루어지기 때문에 ..

NIO TCP blocking channel 소켓서버 & 클라이언트
Language/Java 2017. 3. 30. 12:29

NIO TCP blocking channel 소켓서버 & 클라이언트 서버 소켓 생성ServerSocketChannel sock = ServerSocketChannel.open();sock.configureBlocking(true);sock.bind(new InetSocketAddress(9190)); 요청기다림SocketChannel socketChannel = sock.accept(); 클라이언트 소켓 생성SocketChannel socketChannel = SocketChannel.open();socketChannel.configureBlocking(true);socketChannel.connect(new InetSocketAddress(9190)); 서버 or 클라이언트로부터 정보 받기socketC..

비동기 파일채널
Language/Java 2017. 3. 29. 17:33

비동기 파일채널 FileChannel의 read() write()는 입출력작업을 하는 동안 블로킹이 된다.그래서 UI 및 이벤트를 처리하는 스레드에서 이 메소드들을 호출하면 블로킹되는 동안 UI갱신이나 이벤트 처리를 할 수 없어 작업 스레드를 생성해서 처리해야한다. 그래서 NIO에서 불특정 다수 파일 및 대용량 파일의 입출력 작업을 위해 비동기 파일 채널(AsynchronousFileChannel)을 별도로 제공함 1. AsynchronousFileChannel 생성과 닫기- AsynchronousFileChannel은 두 가지 정적 메소드인 open()을 호출하여 얻을 수 있다. AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(Pa..

NIO
Language/Java 2017. 3. 29. 16:10

Io, nio 차이입출력방식 : 스트림방식 , 채널방식버퍼방식 : 논 버퍼, 버퍼비동기방식 : 지원안함, 지원블로킹/논블로킹 방식 : 블로킹방식, 블로킹/논블로킹모두 지원 스트림 vs 채널스트림 : 입력을 하기위해 입력 스트림을 생성하고 출력을 하기위해 출력 스트림을 생성해야함NIO(채널) : 채널은 양방향으로 입력과 출력이 가능. 입출력을 하기 위해 별도의 채널을 만들 필요가 없음. 버퍼 vs 논버퍼IO에서는 스트림이 1바이트를 쓰면 입력스트림이 1바이트를 읽는다. (이런 시스템은 대체로 느림)그래서 버퍼를 이용하여 복수 개의 바이트를 한꺼번에 입력받고 출력하는 것이 빠른 성능을 냄(보조 스트림 BufferedInputStream, BufferedOutputStream) IO는 스트림에서 읽은 데이터를..

[JAVA NIO] WatchService(와치서비스)
Language/Java 2017. 3. 24. 13:55

WatchService(와치서비스) - 디렉토리 내부에서 파일 생성, 수정, 삭제 등의 내용 변화를 감시하는데 사용. (파일변경 통지 매커니즘으로알려짐)ex) 텍스트 에디터 1. 생성WatchService watchService = FileSystems.getDefault().newWatchService(); Path 객체에서 register() 메소드에 watchService를 등록하고 어떤 변화(생성, 삭제, 수정)를 감시할 것인지 StandardWatchEventKinds을 지정한다. 2. 감시자 지정Path path = Paths.get("d:/test");path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatch..