JAVA
[자바스터디] 쓰레드
프로세스와 쓰레드 프로세스 실행 중인 프로그램 프로그램이 실행하면 OS에서 실행에 필요한 메모리를 할당받아 프로세스가 된다. 메모리 데이터 메모리 등의 자원 1개 이상의 쓰레드 기존 DOS OS에서는 하나의 작업만 가능했지만, 최근 대부분의 OS는 멀티태스킹을 지원합니다. 따라서 여러 프로세스를 실행시킬 수 있습니다. 쓰레드 하나의 프로세스에서는 여러 쓰레드를 할당받을 수 있다. 갯수에 제한은 없다 단, 메모리에서 호출스택에 제한되기 대문에 생성할 수 있는 쓰레드 수가 한정된다. 멀티태스킹 하나의 CPU코어는 하나의 작업만 처리 가능 CPU코어의 갯수보다 쓰레드의 갯수가 많기 때문에 여러 작업을 번갈아 실행 장점: CPU의 사용률을 향상 자원을 보다 효율적 사용 사용자에 대한 응답성 향상 작업이 분리되어..
[자바스터디] Generic vs Object
Generic vs Object Generic과 Object에서 가장 큰 차이점은 타입을 체크하는 타이밍이 다르다는 것입니다. Generic .java파일을 컴파일하게 되면 제네릭을 전부 타입 검사 후 제거하게 된다. 따라서 이후 .class파일에서는 제네릭이 남아 있지 않는 상태가 된다. Test a = new Test(); a.setValue("한글"); String aValue = a.getValue(); Object 컴파일한 후 런타임을 도중 타입체크를 해줘야 한다. 또한 값을 사용하기 위해 Casting을 해주어야 하는데, 성능 저하에 큰 영향을 준다. ObjectTest ot = new ObjectTest(); ot.setValue("한글"); String han = ot.getValue();..
[자바스터디] Generic
Generic Java 1.5부터 추가된 기능으로 다양한 타입의 객체를 다루는 변수나 클래스에 사용되는 기능이다. 컴파일 타임에 타입 오류를 잡을 수 있어 런타임 오류를 줄일 수 있습니다. Generic 장점 타입 안전성 : 모든 타입에 대해 처리할 수 있지만, 실제로 사용 시, 컴파일 타임에 체크를 하므로 런타임에서는 하나의 타입만 사용하여 오류를 줄일 수 있다. 코드의 간결화 : 타입체크와 형변환을 생략할 수 있다. Object class ObjectTest { Object value; public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } } Generic 이전에 위와 같이..
[자바 스터디] for vs foreach vs iterator
Collection에 대해 공부하다 for문도 있고 foreach문도 있는데 무슨 차이로 동작하고 iterator와의 차이는 무엇인가 궁금하여 공부한 내용을 정리합니다. 1. Loop문의 특징 Loop의 반복문 Java에서 반복문을 사용할 때 for문을 사용하였습니다. int[] arr1 = new int[]{1,2,3,4,5}; for (int index = 0; index < arr1.length; index++) { System.out.println(arr1[index]); // 1 2 3 4 5 } 따라서 위와 같이 사용했는데, 더 다양하고 효율적으로 데이터를 관리할 수 있는 Collection이 나오면서 Collection사용을 지향하게 됐고 List arr = new ArrayList(Arra..
[자바스터디] Collection - Collections
Collections Arrays와 동일하게 Collection에 관련된 메서드를 제공하는 클래스 1. Collection의 동기화 멀티 쓰레드 프로그래밍을 하게 되면, 하나의 객체를 여러 쓰레드가 동시 접근이 가능하다. 따라서 데이터의 일관성을 위해 동기화가 필요하다. List list = Collections.synchronizedList(new ArrayList(Arrays.asList(1,2,3))); 2.Unmodified 컬렉션 데이터 일관성을 위해 동기화를 했지만, 만약 데이터를 번경하지 않게 하기 위해서는 해당 메서드를 이용한다. List list = Collections.unmodifiableList(new ArrayList(Arrays.asList(1,2,3))); 3. 하나의 종류만 ..
[자바스터디] Collection - Iterator
Iterator 컬렉션의 프레임워크에서 저장된 요소들을 읽기 위한 방법 종류: Iterator : 표준화한 인터페이스 ListIterator : Iterator의 기능을 향상 시켰다. Enumeration : Iterator이전에 사용하던 인터페이스 1. Iterator Interface - List, Set iterator의 경우 리스트의 순환에 사용한다. 따라서 리스트의 메서드에는 .iterator()로 Iterator의 인터페이스를 가져오는 메서드가 존재하므로, 해당 메서드를 사용하면 된다. List a = new ArrayList(Arrays.asList(111,222,333,444,555,666,777)); for (Iterator iter = a.iterator(); iter.hasNext()..
[자바스터디] Collection - List
Collection Framework 데이터들의 집합을 저장하는 클래스들 Collection Framework Interface List : 순서가 있으며 데이터의 중복을 허용한다. Set : 순서가 없으며, 데이터의 중복을 허용하지 않는다. Map : Key대응하는 Value값을 통해 데이터를 접근하며, 순서가 없다. 또한 Key값은 중복을 허용하지 않는다. Collection Framework 상속도 List 1. ArrayList Object[] 을 이용하여 데이터를 순차적으러 저장한다. 초기 용량이 정해져 있다. 최대 용량까지 다 저장했을 경우 새로운 배열을 생성하영 기존 저장 내용을 새로운 배열에 넣은 후 저장한다. 하나의 배열로 되어있기 때문에 인덱스 접근의 경우 빠르지만, 데이터 중간에 추가..
예외 처리
Error 에러란 프로그램이 동작 중 어떤 요인으로 인해 동작을 중지하거나 비정상적인 동작을 하는 것을 말합니다. 이때 에러에는 크게 2가지가 있는데, 컴파일 에러와 런타임 에러로 나눌 수 있습니다. 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 프로그램이 실행하는 도중에 발생하는 에러 Compile Time Error JVM을 통해 .class 파일로 변환되는 과정이다. .java파일에 대해 잘못된 문법, 오타, 자료형 문제 등의 기본적인 검사를 수행한다. Run Time Error 대표적인 예 무한루프 Null 에러 0으로 나누는 경우 잘못 접근한 경우 즉, 프로그램을 잘못 설계하면서 생기는 에러가 Run time error이다. 프로그램을 짜고 정상 동작을 확인하면서 생기는 에러는 대부..
인터페이스
인터페이스란? 인터페이스란 추상클래스보다 추상적인 클래스라고 생각할 수 있다. 인터페이스는 오직 클래스 메서드와 클래스 변수만 가질 수 있다. 따라서 전부 미완성인 메서드들로만 구성되어 있습니다. 인터페이스 사용법 기본 사용법 interface InterfaceClass { /** * 모든 인터페이스의 변수는 public static final이 기본이다. */ public static final int VALUE1 = 5; public final int VALUE2 = 5; public static int VALUE3 = 5; public int VALUE4 = 5; int VALUE5 = 5; /** * 인터페이스 메소드는 public abstract가 기본이다. */ public abstract v..
상속 - 추상클래스
추상클래스 클래스에는 추상 클래스라는 것이 있습니다. 추상클래스는 하나의 미완성 클래스입니다. 미완성 클래스 ? 완성할 필요가 있는 클래스입니다. 한마디로 일반 클래스는 '내가 가지고 있는걸 기본으로 추가해서 너가 써' 입니다. 그러나 추상클래스는 '내가 가지고 있는걸 기본으로 줄께 근데, 꼭 필요한게 있으니까 규격에만 맞게 너가 작성하고 반드시 추가해' 입니다. 즉 추상 클래스는 자식 클래스들에게 하나의 길을 알려주는 것과 같습니다. 또한 추상클래스는 추상 메서드를 가지고 있어야합니다. 추상 클래스 작성법 abstract class AbastractClass { } 여기서 꼭 추상 클래스에 추상 메서드가 없어도 됩니다. 하지만 추상 메서드가 존재한다면 추상 클래스여야만 합니다. 이것을 제외하면 일반 클..