Language/Java (총 22개) 썸네일형 리스트형 Java - 쓰레드 동기화 (Synchronized) 앞선 포스팅에서 멀티쓰레드의 장점과 문제점을 다루었다 ( http://galid1.tistory.com/11 )오늘은 원초적이지만 가장 간단한 멀티쓰레드의 문제점 해결방법을 포스팅 할 것이다. 해결방법은 synchronized 를 보호하고자 하는 변수, 메소드 등에 사용하는 것이다 => public synchronized void count() {acquire();try {Thread.sleep(1000);num++;} catch (InterruptedException e) {e.printStackTrace();}release();} 1. 이렇게 메소드 앞에 synchronized 키워드를 사용한다면 한 쓰레드가 해당 메소드에 접근할때 lock을 가지고 들어간다 2. 다른 쓰레드가 해당 메소드에 또 접근.. Java - 멀티쓰레드 (Multi Thread) 멀티 쓰레드는 CPU를 최대한 활용할 수 있는 도움을 주었다 하지만 쓰레드는 이와 동시에 위험을 주었다 위험이란 원자적이지 못한 메소드를 여러개의 쓰레드가 동시에 접근하여 수행할때 그 결과값이 우리가 기대하는 값과는 다를 수 있다는 것이다. 아래 예시를 보자 ----------------------------------------------------------------------------------------*Count Class : 카운트 클래스는 num이라는 변수와 count()라는 num을 1씩 증가시키는 메소드를 가지고 있다----------------------------------------------------------------------------------------1234567.. Java - InputStream 의 read()메소드는 왜 int형을 반환 하는가 InputStream 의 read()는 입력스트림의 1바이트를 읽기위한 메소드이다그런데 메소드의 시그니처를 살펴보면 반환형이 int형 인것을 볼 수 있다. 이유는 입력스트림을 읽다가 끝이란 것을 나타내기 위해 -1을 return 해야하지만byte의 경우 8bit(0 ~ 255) 이기 때문에 -1 이란 값을 리턴할 수가 없다. 따라서 -1 (int형)을 리턴함으로써 입력스트림의 끝을 나타낸다. Java - String 과 StringBuffer 클래스 * String 은 불변 클래스이다 ! String hi = "hello"; hi += " world";System.out.println(hi); => hello world ? String 은 불변 클래스라고 하지 않았던가 어떻게 이런일이 가능한지 살펴보자 java 에서는 String값에 변화가 필요할경우 아래와 같은 작업이 일어난다 1. String hi = "hello"; => 가장먼저 JVM 메모리 상수풀에 "hello" 라는 문자열이 넣어지고 그 주소를 hi 변수가 가리키게 된다. hi -> "hello" 2. hi += " world"; String은 불변객체이므로 직접 값을 바꿀수 없다 따라서 먼저 StringBuffer 란 객체를 생성하고 원래의 String 값을 넣는다 new StringB.. Java - equals 과 == 차이 1. equals 는 객체가 가진 내용이 같은지 다른지를 비교하는 메소드이다 2. "==" 는 객체의 메모리 주소를 비교한다 ex ) String a = "a"; String b = "a"; if (a.equals(b)) system.out.println("같다") => 같다 if (a == b) system.out.println("같다") => 같다 * "==" 은 메모리의 주소를 비교한다고 했는데 왜 같다 라는 결론이 나왔을까 Java 에서 Jvm에 메모리 할당시 String a = "a"; 와 같은 방식으로 할당할 경우 상수풀이란 곳에 "a" 값이 저장되게 되고 a가 그 주소를 가리키게된다 이때 String b = "a"; 를 실행 할 경우 상수풀에 이미 "a"란 값이 있으므로 b에 새로운 주소가 .. Java - Wrapper / 오토박싱 1. Wrapper 클래스 자바에는 기본형 타입들을 객체 형태로 변형 시켜주는 클래스들을 일컫는다 ex) -Integer -Long -Double -Float -Byte -Short -Character -String * 래퍼클래스(Wrapper) 를 사용하는 이유 (기본타입을 객체 타입으로 바꾸어야 하는 이유) => 1. 각각의 래퍼클래스에서 제공하는 메소드들을 사용하기 위해 ex ) 예를 들어 int -> String , String -> int 형으로 바꾸기 위해 2. 오토 박싱/언박싱 기본 타입의 값을 객체 타입으로 자동으로 바꾸고 그 반대로 하는 행위 * 왜 필요한가 ? java5 이전의 버전에서는 기본타입의 값들이 래퍼클래스의 메소드들을 사용하기 위해서는 래퍼클래스로 기본타입의 값을 변형 시킨뒤.. 이전 1 2 3 다음