지네릭스의 전반적 개념(2)
·
자바/지네릭스
5. 제한된 지네릭 클래스 - 타입 문자로 사용할 타입을 명시하면 한 종류의 타입만 저장할 수 있도록 제한할 수는 있지만, 그래도 여전히 아래의 코드처럼 모든 종류의 타입을 저장할 수 있다는 것에는 변함이 없다. FruitBox fruitBox = new FruitBox(); fruitBox.add(new Toy()); // 과일상자에 장난감을 담을 수 있다? ( 이러한 것을 해결하기 위해서는 class 이름 뒤에 아래와 같이 지네릭 타입을 주면 된다. ) class FruitBox{// Fruit의 자손만 타입으로 지정가능 ArrayList list = new ArrayList(); ... } public class Exercise002{ public static void main(String[] ar..
지네릭스의 전반적 개념(1)
·
자바/지네릭스
1. 지네릭스란? - 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 대해서 타입 체크를 해주는 기능을 말한다. - 그러므로, 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄어든다. - 타입 안정성을 높이는 것은 의도치 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다는 뜻이다. - 예를 들면, ArrayList 컬렉션 클래스에 다양한 객체를 담을 수 있지만 한 종류의 객체를 담는 경우가 많다. 그런데도 꺼낼 때 마다 타입 체킹을 하거나 사용자가 원하지 않는 종류의 객체를 저장하는 것을 막지 못하는 불편한 점이 있다. 그러한 것을 해결할 수 있는 것이 바로 '지네릭스'이다. - 아래는 지네릭..
fork & join 프레임웍
·
자바/프로세스와 쓰레드
1. fork & join 프레임웍 - 이 프레임웍은 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어 준다. - 수행할 적업에 따라 두 클래스로 나눠지는데, 상속받아 구현해야 한다. 클래스 설명 RecursiveAction 반환값이 없는 작업을 구현할 때 사용 RecursiveTask 반환값이 있는 작업을 구현할 때 사용 public abstract class RecursiveAction extends ForkJoinTask{ ... protected abstract void compute(); // 상속을 통해 이 메서드를 구현해야 한다. ... } public abstract class RecursiveTask extends ForkJoinTask{ ... V res..
volatile
·
자바/프로세스와 쓰레드
1. volatile - 메모리 값과 캐시 값과의 차이가 발생할 때 volatile을 사용한다. - 이 volatile은 싱글 코어 프로세서에서는 문제가 발생하지 않으므로 쓰일 곳이 없지만, 멀티 코어 프로세서에서 많이 쓰일 것이다. 그 이유는 멀티코어 프로세서마다 각 캐시가 존재하기 때문이다. - 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 빠르게 작업한다. 그러다보니, 값을 읽어올 때 캐시에 값이 존재하는지 확인하고 없을 때에만 메모리에 가서 값을 읽어온다. - 만약 코어가 메모리에 값이 변경되었는데도 캐시 값을 쓰인다면, 의도와 다른 값을 가질 수 있다. - 그러나 캐시에 사용되는 변수 앞에 volatile을 쓴다면, 코어가 캐시가 아닌 메모리에 가서 읽어오기 때문에 해결할 ..