본문 바로가기

Java

(45)
2. Java 멀티쓰레드 환경(volatile, synchronized, atomic) 멀티쓰레드 환경에서 자주 언급되는 가시성, 원자성, 동기화에 대해서 먼저 이해하고 넘어가야합니다.개념원자성(Atomicity)가시성(Visibility)동기화(Synchronization)목적중간에 끊기지 않고 완전한 실행 보장변수 값이 다른 쓰레드에서 즉시 보이게 보장여러 쓰레드에서 동시 접근 제어보장연산이 중간에 끊어지지 않음다른 쓰레드가 즉시 값을 반영원자성, 가시성 보장예시AtomicInteger.incrementAndGet()volatile 변수synchronized 키워드 사용성능매우 효율적(CAS방식)성능 저하 없음성능 저하, 잠금 획득 대기 가능 CAS(Compare And Swap)방식CPU나 메모리에 저장된 현재 값과 기존 값을 비교한 후, 만약 값이 일치하면 새로운 값을 메모리에 반영..
1.JVM 1. JDK, JRE, JVM JDK자바 개발환경으로 자바 어플리케이션을 개발하기 위해 필요한 도구를 제공한다.자바 언어를 바이트 코드로 컴파일 해주는 자바 컴파일러(javac), 자바 클래스 파일을 해석해주는 역어셈블리어(javap) 등이 있다.JRE자바 실행환경으로 JVM, 자바 클래스 라이브러리, 기타 자바 어플리케이션 실행헤 필요한 파일들을 포합한다.JVM자바 가상 머신으로 자바 어플리케이션을 실행하는 가상 머신이다. 실제 컴퓨터로 부터 Java어플리케이션 실행을 위한 메모리를 할당받아 Runtime Data Area를 구성한다. 2. Runtime Data Area  자바 가상 머신은 프로그램 실행 중 다양한 런타임 데이터 영역을 사용한다. 런타임 데이터 영역은 모든 스레드들이 공유하는 영역과..
[완전 탐색] N과 M(1) - 중복제외 1. 문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 주의사항 이중 for문을 이용해서 selected배열을 모두 찾을 수도 있지만, 시간복잡도가 오래 걸리게 된다. 그래서 used라는 배열을 이용해서 선택한 숫자의 사용여부를 판단할 수 있다. used : 사용한 숫자를 인덱스로 하며 사용했다면 "1" 미사용이라면 "0"을 저장한다. selected : 선택한 숫자를 저장하는 배열 최초 호출한 재귀함수의 싸이클이 끝났을 경우 선택한..
[완전 탐색] N과 M(3) - 중복허용 1. 문제 https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 2. 주의사항 selected배열에 선택한 값 N을 넣을 때 배열의 시작이 0인지, 1인지에 따라서 자연수 N선택하는 for문, 최종적으로 출력하기 위한 비교연산(k ==m)이 달라지므로 을 헷갈리면 안된다. N(자연수)을 선택하는 for문의 시작값은 0이아닌 1로 설정(0으로 해도 되나 추가로 +1을 계산해줘야함) 3.풀이 import java.io.*; import java.uti..
[Web] Java Testing Framework - Unit Test(JUnit) 들어가면서 1. TDD 테스트 주도 개발(Test-Driven Development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트퀘어 개발 프로세스중 하나입니다. 쉽게 얘기하면 개발을 하는데 있어서 테스트가 주가 되어 개발한다는 의미 입니다. 제품의 테스트가 좋을수록 제품의 품질이 향상 됩니다. 그래서 테스트는 중요하다고 생각합니다. 기존 개발 프로세스 설계 개발(코드 작성) 테스트(코드 작성) TDD 프로세스 설계 테스트(코드 작성) 개발(코드 작성) TDD 방법론을 사용할 경우 아래의 같은 장점, 단점이 있습니다. 장점 객체지향적인 코드 개발 - 모든 코드가 재사용 성을 기반으로 작성하기 때문 설계 수정 시간의 단축 - 테스트 코드를 먼저작성하기 떄문에 설계의 구조적 문제점을 바로 찾음 디버깅..
[Java] 리플렉션 (Reflection) 리플렉션은 일반적으로 Java 가상 머신에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정하는 기능이 필요한 프로그램에서 사용된다. 리플렉션은 강력하지만 무분별하게 사용해서는 안 된다. 리플렉션을 사용하지 않고 작업을 수행할 수 있다면 사용을 피하는 것이 좋다. 리플렉션을 통해 코드에 액세스할 때 다음 사항을 염두에 두어야 한다. 장점 확장성 디버거 및 테스트 도구 단점 성능 오버헤드 보안 제한 내부 노출 출처 : https://docs.oracle.com/javase/tutorial/reflect/index.html Trail: The Reflection API (The Java™ Tutorials) The Java Tutorials have been written for JDK 8. Examp..
[Java] 중첩클래스(Nested Classes) Java 프로그래밍 언어를 사용하면 클래스 내에 다른 클래스를 정의할 수 있다. 이러한 클래스를 중첩 클래스라고 한다. - 중첩 클래스를 사용하는 이유 한 곳에서만 사용되는 클래스를 논리적으로 그룹화 캡슐화 증가 더 읽기 쉽고 유지 관리하기 쉬운 코드로 이어짐 - 더 구체적인 상황에 맞게 사용하는 경우 Local Classes(로컬 클래스) 클래스의 인스턴스를 두 개 이상 생성하거나 생성자에 액세스하거나 이름이 지정된 새 유형을 도입해야 하는 경우 Anonymous Classes(익명 클래스) 필드나 추가 메소드를 선언해야 하는 경우 Lambda Expression(람다식) 다른 코드에 전달하려는 단일 동작 단위를 캡슐화하는 경우 기능 인터페이스의 간단한 인스턴스가 필요하고 앞의 기준이 적용되지 않는 경..
[Java] Optional java.util.Optional 클래스 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다, 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있다. Optional 객체의 생성 of() 메소드나 ofNullable() 메소드를 사용하여 Optional 객체를 생성할 수 있다. of() 메소드는 null이 아닌 명시된 값을 가지는 Optional 객체를 반환한다. 만약 of..