목록JAVA (7)
charminseok
객체지향 언어인 자바는 함수형 프로그래밍을 지원하기위해 자바8부터 stream API, 람다식 등이 추가되었다. Stream API를 사용하면 기존 for문을 사용하지 않고 함수를 사용해 컬렉션 데이터를 처리할 수 있다. String[] words = {"java", "python", "javascript", "C++"}; // 1. 4글자 이상 단어 출력 for (String s : words) { if (s.length() > 4) { System.out.println(s); } } // 2. 정렬 후 출력 Arrays.sort(words); for (String s : words) { System.out.println(s); } 위의 코드처럼 for문을 사용하는 것보다 더 간단하고 가독성있게 작성할..

테스트를 통해 코드가 의도한 방식으로 동작하는지 검증하기 위한 절차로 문제를 방지하기 위한 것이기도 하고, 코드 변경으로 인한 사이드 이펙트를 줄일 수 있기도 한다. 단위 테스트 단위 테스트는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트다. 작은 단위로 테스트를 하며 이 단위는 하나의 기능 또는 메소드가 될 수도 있다. 통합 테스트 통합 테스트는 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트이다. 애플리케이션은 여러 모듈들로 구성되어 있고 이런 모듈들끼리 호출하면서 기능을 수행한다. 그래서 독립적인 기능에 대한 테스트가 아니라 통합적인 실행과정이 올바르게 동작하는지 확인하는 것이다. JUnit 스프링 부트를 만들면 자동적으로 JUnit5를 사용할 수 있..

자바의 Map 자료구조에는 HashMap, HashTable, ConcurrentHashMap 등이 있습니다. 이중 HashTable은 동기화를 제공해줘 멀티스레드 환경에서 이점이 있지만 성능에 타협을 봐야합니다. 하지만 HashMap은 동기화가 지원되지 않아 속도는 빠르지만 멀티쓰레드 환경에서 데이터가 잘못될 수 있습니다. 멀티스레드 환경에서 동시성을 보장하고 HashTable 보다 빠른 자료형을 사용할 수 없나? 에 대한 답으로 자바에서 ConcurrentHashMap을 지원하고 있습니다. HashTable get, put 메소드를 확인해 보면 메소드 자체에 synchronized 키워드가 사용되는 것을 볼 수 있습니다. 메소드들에 synchronized 키워드를 통해 한 스레드가 lock을 획득해 ..

동기화란? 자바에서 동기화는 여러 스레드가 한 개의 자원을 사용하려고 할 때 한 스레드만 접근 가능하고 나머지 스레드는 접근하지 못하도록 막는 것입니다. Synchronized 키워드를 사용해 동기화를 사용할 수 있어 멀티스레드 환경에서 Thread-safe의 장점이 있지만 성능에 문제가 생길 수 있기 때문에 적절하게 사용해야 합니다. Vector, HashTable, Collections.synchronizedXXX() 리스트에 ArrayList, LinkedList, Vector가 있는데 이 중 Vector만 내부적으로 synchronized 키워드를 사용해 동기화 되어있습니다. Map에는 HashMap, TreeMap, Hashtable 등이 있는데 이중 HashTable이 동기화 되어 있습니다. ..
동등성과 동일성 둘다 무엇인가 같은지 비교할 때 사용되는 개념이다. 동등성 동등성은 두 객체가 같은 정보를 가지고 있는 경우 동등하다라고 할 수 있다. 서로 다른 주소에 만들어진 객체라도 그 안에 들어있는 값이 같다면 동등성이 성립하는 것이다. 동등성은 equals()로 확인할 수 있다. String s1 = new String("asdf"); String s2 = new String("asdf"); System.out.println(s1.equals(s2)); // True System.out.println(s1 == s2); // False 위와 같은 상황에서는 s1과 s2의 값이 같기 때문에 동등하다고 볼 수 있다. 동일성 동일성은 두 객체가 같은 주소에 있는 객체를 가리킬 때, 결국 완전히 같은 ..
싱글톤이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. public class Singleton { //Instance private static Singleton instance; //private construct private Singleton() {} public static Singleton getInstance() { if (i..
자바의 JVM은 자바파일을 실행시키는 것 뿐만 아니라 garbage collection(GC)이라는 메모리 관리도 해준다. GC는 사용하지 않는 객체를 JVM이 알아서 정리해주기 때문에 메모리 누수를 방지합니다. stop-the-world GC에 들어가기 앞서 가장 먼저 알아야할 용어는 stop-the-world이다. stop-the-world는 GC를 실행하기 위해 JVM이 애플리케이션을 멈추는 것입니다. 그렇기 때문에 stop-the-world가 발생하면 GC를 실행하는 쓰레드 외 모든 쓰레드가 멈추게 됩니다. Garbage Collection을 하는 대상 자바에서 Reference type의 객체를 생성하면 실제 객체는 heap영역에 저장되고 참조 타입 변수는 스택 영역에 실제 객체의 주소를 저장합..