반응형

프로그래밍 정리/자바 97

문자 스트림과 바이트 스트림

- 원래 스트림은 바이트 단위로 핸들하는 것을 기본으로 함.문자도 내부적으로 바이트 단위로 되어 있으며, 프로그램에서 문자를 사용할 때는 적절한 문자 인코딩으로 변환해서 사용해야함.이러한 불편을 해소하기 위해서 스트림 차원에서 문자를 처리해 주는 문자 스트림을 제공. 스트림을 바이트로 핸들하느냐 문자로 핸들하느냐에 따라서 두 가지 종류로 나눌 수 있음. - 바이트와 문자에 대한 스트림의 종류-> 바이트 스트림 : 바이트 단위-> 문자 스트림 : 문자 단위 - 바이트 스트림-> 바이트 스트림은 데이터를 바이트 단위로 주고 받는 것을 말함.대표적인 바이트 스트림은 InputStream과 OutputStream임. 그렇다면 InputStream과 OutputStrea을 통과하는 단위는 당연히 바이트. 8bit..

스트림의 종류

- 스트림은 데이터의 입출력을 도와주는 중간자 역할.데이터의 목표지점이 네트워크의 어느 장소이든, 메모리이든 상관하지 않음. 다만 해당 데이터를 스트림으로 보내고 그리고 스트림에 존재하는 데이터를 읽어들이거나 기록해 버리면 끝. 목표지점이 어디라도 상관없으며 복잡한 작업은 스트림이 알아서 해결해 준다는 의미. - 스트림의 가장 기본적인 분류는 입력과 출력 스트림으로 나눌 수 있음. - 스트림의 기본적인 분류-> 입력 스트림(예 : FileInputStream, ObjectInputStream)-> 출력 스트림(예 : FileOutputStream, ObjectOutputStream) - 문자 스트림 : 문자 스트림은 최상위의 Reader와 Writer로 이루어져 있음. Reader - BufferRead..

스트림의 원리

- 스트림이란?-> 스트림이란 빨대.-> 스트림은 빨대에 비유할 수 있음. 어떠한 음료수든 각각의 빨대만 꽂으면 음료수를 마실 수 있음.-> 야쿠르트용 빨대와 콜라용 빨대는 빨대는 꽂는 대상이 다름. 하지만 목표지점에 꽂기만 하면 그 다음부터는 빨대로 흡입하기만 하면 됨.-> 스트림으로부터 데이터 읽기=> 목표지점에 적절한 입력용 스트림을 생성.=> 스트림으로부터 데이터를 읽음.=> 스트림으로부터 필요한 만큼 계속해서 데이터를 읽음=> 스트림을 닫음-> 빨대로부터 음료수 마시기=> 적절한 빨대를 음료수에 꽂음=> 빨대로부터 음료수를 흡입.=> 빨대로부터 마시고 싶은 만큼 계속해서 음료수를 흡입=> 빨대를 제거 - 자바에서 사용하는 스트림은 방향성을 가짐. 스트림을 입력용으로 만들었다면 읽기에만 사용가능...

스트림(Stream)이란?

- 스트림(Stream)이란 장치(Device - 하드웨어 장치)로부터 데이터를 읽거나 기록할 때 사용하는 중간 매개체 역할을 하는 놈.-> 입출력 장치의 일반적인 특징=> 일반적인 입출력 장치는 대부분 데이터를 읽고 기록한다는 특징이 있음. - 어떠한 입출력 장치든 데이터를 읽고 쓰는 작업은 반드시 필요로 함. 입출력 데이터를 처리하기 위한 공통된 방법이란 바로 읽기와 쓰깅 대한 공통된 방법을 말함. 즉, 다양한 장치에 존재하는 데이터를 읽고 쓰기 위한 공통된 방법을 스트림이 제공하는 것. - 스트림의 역할-> 스트림은 데이터를 읽고 쓰기 위한 공통된 방법을 제공 - 원하는 장치에 스트림을 어떻게 개설하느냐가 문제지 스트림을 통해서 읽고 쓰는 것은 공통된 방법이기에 문제가 되지 않음.목표지점이 주어지면..

Java Stream(자바 스트림)

- 프로그램에서 사용하는 데이터는 파일일 수도 있으며 메모리일 수도 있음. 그리고 각종 하드웨어적인 입출력 장치에 존재할 수도 있음. 이렇게 다양한 장소에 존재하는 데이터들을 핸들하기 위해서는 입출력 데이터를 처리하는 공통된 방법이 있어야함.-> 입출력을 위한 공통된 방법=> 다양한 장소에 존재하는 데이터들을 핸들하기 위해서는 입출력 데이터를 처리하는 공동된 방법이 있어야함. - 만약 입출력 데이터를 처리하는 공통된 방법이 없다면 여러분은 각각의 하드웨어 장치에 직접 접근해서 데이터를 읽고 기록해야함. 키보드로부터 데이터를 읽기 위해 키보드가 동작하는 원리를 알아야 하며, 하드디스크에 있는 파일을 읽거나 기록하기 위해서 하위레벨의 하드 디스크를 알아야함. 이러한 불편을 없애기 위해서 자바에서는 스트림(S..

synchronized의 한계

- synchronized는 자동 동기화. 즉, 공유자원을 사용하면 synchronized 블록에서는 자동으로 동기화가 보장되는 것.편리하지만 미세한 동기화를 제어하기에는 약간의 한계가 있음. - 비디오 가게를 예로, 비디오 가게에 비디오 테이프가 5개 있고, 그리고 손님들이 비디오 테이프를 빌려간다는 가정하에 동기화가 보장되어야함. 두 사람이 동시에 하나의 테이프를 빌려가면 안 됨. 물론 synchronized를 사용하면 동기화는 보장 할수 있지만, 비디오를 빌린 후 비디오 테이프를 보는 동안에 동기화를 걸면, 한 사람이 비디오를 보는(시청하는) 동안 어떠한 사람도 비디오 테이프를 빌릴 수 없음. 잘못된 동기화의 예=================================================..

synchronized의 활용

- synchronized 블록을 이용할 때 안에 들어가는 객체의 멤버 변수에 대해서 동기화가 보장. 그렇다면 다음과 같이 saveMoney()와 minusMoney()의 메서드에서 synchronized 블록을 사용해도 됨.-> public void run(){synchronized(SyncMain2.myBank){SyncMain2.myBank.saveMoney(3000);}} -> public void run(){Synchronized(SyncMain2.myBank){SyncMain2.myBank.minusMoney(1000);}} - synchronized가 객체의 멤버를 상대하기 때문에 해당 객체만 명시해주면 어디서든 사용 가능. =====================================..

synchronized

- synchronized는 메서드와 블록 형태로 사용할 수 있으며, synchronized 메서드로 사용될 경우 해당 메서드 내에서 사용되는 모든 멤버 변수들은 락(Lock)이 걸리게 됨. - synchronized 메서드의 예-> public synchronized void saveMoney(int save){// .... 공유자원 - 멤버의 사용} -> synchronized 블록의 예=> 만약 블록 형태로 사용된다면 블록에서 명시한 객체의 멤버들은 모두 락(Lock)에 걸리게 됨.public void saveMoney(int save){synchronized(this){// ...공유자원 - 멤버의 사용}}// synchronized 메서드나 블록 내에서 사용되는 공유자원은 무조건 동기화가 보장됨..

공유자원의 접근

- 여러 개의 쓰레드가 생성되었을 때 하나의 자원을 이용하는 상황은 자주 발생. 공유자원을 이용할 때 문제가 발생하게 되는근본적인 이유는 동시에 작업을 진행하는 쓰레드의 특성 때문. - 공유자원이 문제가 되는 이유-> 동시에 작업을 진행하는 쓰레드의 특성 때문 - Bank라는 클래스의 객체를 NotSynMain에서 스태틱으로 생성함으로써 myBank객체는 프로그램의 하나의 메모리만 생성.-> Bank 클래스class Bank{// ...}-> NotSynMain 클래스의 static 멤버class NotSynMain{public static Bank myBank = new Bank();// ... 작업}- 그리고 다음과 같이 두 개의 쓰레드에서 NotSynMain의 myBank객체를 이용한다면 myBan..

멀티쓰레드와 문제점

- 쓰레드의 정의 : '쓰레드가 메서드가 동시에 실행되는 것'. 이 말은 동시에 메서드의 작업이 진행된다는 의미를 담고 있음.여러개의 쓰레드가 동시에 작업을 진행할 때 가장 큰 문제로 제기되는 것은 바로 공유자원(Shared Resource)의 문제 - 쓰레드가 생성되더라도 메서드 내부에 존재하는 자료만을 사용한다면 별다른 문제가 없음. 즉, 공유자원 자체가 없는 것.예를 들어 A, B, C라는 세사람이 화장실을 사용하려고 함. 각자의 방에 화장실이 하나씩 있다면 별다른 문제 없이 일을 볼 수 있음. 문제는 화장실이 하나밖에 없을 때 발생. 공용화장실, 그것도 변기가 하나밖에 없는 화장실이라면 사용상의 문제가 발생. A가 일을 보고 있을 때 B와 C는 대기해야함.만약 이것을 어기면 상상하기 힘든 문제가 ..

반응형