java

    Java로 메일 보내기

    이메일 인증기능을 구현하기 위해 알아봤던 내용에 대해 공유합니다. 이메일 프로토콜 이메일을 송수신하기 위한 프로토콜은 따로 존재합니다. `SMTP`, `IMAP`, `POP3` 프로토콜들입니다. java에서 메일을 다루기 전에 각 프로토콜이 무엇이고 어떻게 구성되어 있는지 한번 알아보겠습니다 메일 netwrok 구성 각 프로토콜에 대해 설명드리기 전에 눈으로 파악하기 쉽게 먼저 어떻게 구성되어 있는지에 대해 보여드리겠습니다. MUA ( Mail User Agent ) : 사용자의 이메일 클라이언트, 메일을 보내거나 받을 수 있는 역할을 가지고 있습니다. Ex) Server, Email Client MTA ( Mail Transfer Agent ) : 메시지를 수신하고 전달하는 서버, SMTP 프로토콜을 ..

    [자바스터디] 쓰레드 동기화 & Volatile

    쓰레드 동기화 (Synchronized) 여러 쓰레드가 공유 리소스를 사용하는 경우, 서로 상호 배제를 하여 문제가 발생하지 않도록 하는 기법입니다. 왜 동기화가 필요할까? 하나의 프로세스에서 A쓰레드와 B쓰레드가 있다고 생각해보자, 여기서 A쓰레드가 c변수를 읽는동안 A쓰레드의 시간이 다 되어 B쓰레드로 CPU의 통제권이 넘어갔습니다. 이때 B쓰레드 또한 C변수를 읽고 변경하게 후 A쓰레드로 다시 통제권을 넘겨준다면, C변수의 상태가 변경되었기 때문에 잘못된 접근을 할 수 있습니다. 따라서 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것이 동기화입니다. 이를 위해 임계 영역(Critical Section), 뮤텍스(Mutex), 세마포어(Semaphore) 등의 동기화 기법을 사용합..

    [자바스터디] 쓰레드 동작 순서

    쓰레드 동작 순서 쓰레드 스케쥴링 운영체제가 CPU자원을 여러 쓰레드들 간에 할당하는 과정 우선 순위, 실행시간, 상태 등을 고려하여 CPU를 각 쓰레드들에게 적절하게 할당하여 시스템 전체의 성능을 향상시킵니다. 쓰레드 상태 NEW : 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 RUNNABLE : 실행 중 또는 실행 가능한 상태 BLOCKED : 동기화 블럭에 의해서 일시정지된 상태 ( Lock이 풀릴 때까지 기다리는 상태 ) WAITING, TIMED_WAITING : 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지된 상태 TERMINATED : 쓰레드의 작업이 종료된 상태 실행 대기열 QUEUE와 같은 구조로, 다음 실행을 위해 대기하는 상태 쓰레드 스케쥴링 과정 쓰레드..

    [자바스터디] 쓰레드

    프로세스와 쓰레드 프로세스 실행 중인 프로그램 프로그램이 실행하면 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[] 을 이용하여 데이터를 순차적으러 저장한다. 초기 용량이 정해져 있다. 최대 용량까지 다 저장했을 경우 새로운 배열을 생성하영 기존 저장 내용을 새로운 배열에 넣은 후 저장한다. 하나의 배열로 되어있기 때문에 인덱스 접근의 경우 빠르지만, 데이터 중간에 추가..