목록JAVA (10)
개발자이야기
Java Thread Java Thread란? 우리는 하나의 프로세스를 작성하며 하나의 프로세스 내에 여러개의 스레드로 작업을 진행합니다. 특정 작업을 진행할때 많은 시간이 소요되는 작업이 존재하기 마련입니다. 이럴때 우린 sub thread 를 만들어 처리를 위임하고 main thread는 자기의 일을 이어서 진행 할 필요가 있습니다. Thread 장점 단일 프로세스 내에서 많은 동시 작업 가능 유지 보수 비용 절감 CPU 리소스를 효율적으로 사용 스레드는 시스템 리소스에 최소한의 영향을 미칩니다. 스레드는 기존 프로세스보다 생성, 유지 및 관리에 더 적은 오버헤드가 필요합니다. Thread 단점 복잡한 디버깅 및 테스트 프로세스 교착 상태 발생 가능성 증가 프로그램 작성 난이도 증가 예측할 수 없는 ..
String vs StringBuffer vs StringBuilder Java에서 문자열을 다루는 세 가지의 class에 대해 알아보겠습니다. 우선 위의 세가지를 구분 지어 사용하는 이유에 대해 이해하기 위해선 memory 영역에 객체가 어떻게 할당되는지를 우선 알아야 할 필요가 있습니다. String public static void main(String[] args) { String st = "안뇽"; st = st + "하세요"; } 위의 코드는 Memory 영역에 어떻게 할당될까요? 단순히 st 변수에 안뇽하세요 문자가 저장되니 문제가 없지 않을까요? String 객체는 불변의 객체입니다. 이제 메모리가 어떤 식으로 할당되는지 살펴봅시다. Stack memory는 객체의 참조를 가지고 있으며 H..
interface vs abstract 차이 인터페이스? 추상클래스? 우린 위의 두개가 무엇인지 어느정도는 알고있습니다. 해당 포스팅까지 찾아오신 분이라면 쓰는방법은 알고 계실거라 생각됩니다. 하지만 왜? 어떻게 두개를 구분해서 써야하는거지? 인터페이스는 음.. 다중상속이 되고 추상 메소드를 가지고 있다. 추상클래스는 음.. 다중상속이 되지 않고 추상 메소드를 가지고 있다.. 뭐야.. 그럼 다중상속이 되는 인터페이스를 쓰면되겠네..!? 인터페이스 인터페이스는 설계의 기초 틀을 잡아 놓는 역할을 한다고 생각하면 됩니다. public interface 인터페이스 { int oh = 1; //상수 String method(); //추상메소드 default void method2() { //default 메소드..
Java 메모리 관리 자바의 메모리 관리는 어떻게 이루어질까? stack 영역과 heap 영역으로 나누어져 관리된다는 것은 들어 보셨을 수도 있습니다. 그럼 이제 어떻게 관리되는지를 한번 확인해봅시다. Java heap Memory 자바 heap 공간은 객체를 생성할 때 사용됩니다. (new 키워드로 생성되는 모든 것이라고 생각하면 됩니다.) Garbage Collection은 참조가 해제되거나 없는 객체를 heap 메모리에서 정리합니다. GC가 진행되면 참조가 해제된 객체를 찾아 제거되는 것이 아닌 현재 참조된 객체 즉 사용중인 Live 객체를 찾고 나머지는 모두 쓰레기로 지정됩니다. Java Stack Memory 자바 stack 메모리는 스레드 실행에 사용되며 heap 에 존재하는 개체들의 참조가 ..
Hashmap vs Hashtable HashMap 과 HashTable은 다들 알고 계시듯 key, value 형태로 저장합니다. 하지만 사용법이 궁금해서 해당 포스팅을 방문한 것은 아닐것이라 판단됩니다. 둘의 차이점은 무엇일까요? 우선 결론부터 말씀드리면 Hashmap은 Hashtable의 개선된 버전입니다. 우리는 Hashtable을 쓸 이유가 없습니다. 차이점 1. Hashmap은 동기화가 되지 않으며 Hashtable은 동기화 된다. 2. Hashmap은 하나의 null key 와 여러개의 null value 를 허용하지만 Hashtable은 null이 허용되지 않는다. 위의 내용에서 결국 핵심은 동기화의 여부 입니다. null 문제는 어떠한 방법을 써서든 회피할 수 있다고 생각합니다. 하지만 ..
ArrayList, LinkedList 이번엔 java의 List를 한번 알아보겠습니다. List란? List 인터페이스는 java의 Collection을 확장한 인터페이스 입니다. index를 기반으로 list가 구성됩니다. ArrayList ArrayList는 배열(array)을 기반으로 두고 있습니다. 장점 데이터에 순서가 있음 데이터의 중복 저장 허용 index를 통한 검색 빠름 단점 데이터 추가, 삭제가 느림 ArrayList의 데이터는 위와같이 저장되고 관리됩니다. 데이터의 일반적인 삽입 O(1) ArrayList ar = new ArrayList(); ar.add("data"); ar.add("data2"); 일반적인 add의 경우 마지막에 데이터가 삽입되며 시간복잡도는 O(1) 입니다. 데..
list vs map 이번엔 java의 list와 map의 차이점에 대해 알아보겠습니다. list와 map의 설명은 추후 포스팅 하도록 하고 해당 포스팅에서는 두개의 자료구조를 어떤 상황에서 사용하면 좋을지에 대해 알아보겠습니다. 설명은 List 인터페이스의 구현체인 ArrayList와 Map 인터페이스의 구현체인 HashMap으로 설명하겠습니다. ArrayList ArrayList는 순서대로 번호(index)가 붙은 원소들이 연속적인 형태로 구성된 자료구조 입니다. 특정 인덱스의 검색 O(1) 특정 인덱스에 원소의 삽입 O(n) 마지막 인덱스에 원소의 삽입 O(1) 특정 인덱스의 삭제 O(n) 우선 ArrayList는 유의미한 index를 사용할때 유용하게 사용할 수 있습니다. item들에 index가..
다형성 이번엔 객체지향개념의 다형성에 대해 알아보겠습니다. interface 를 이용한 다형성을 코드로 알아봅시다. interface는 단순히 구현의 목적 달성을 위한 골격을 미리 잡아놓는다 정도로만 생각합시다. 좀더 자세한 설명은 코드를 작성하며 진행하겠습니다. 우리는 다양한것들을 항상 마주합니다. 큰틀의 무언가와 파생되는 많은것들이 있습니다. 아래의 코드를 한번 보겠습니다. public class Coffee { public String getCoffee() { return "아메리카노"; } } public class CoffeeMain { public static void main(String[] args) { Coffee coffee = new Coffee(); System.out.println..