☕️ Java/기본

시작하기에 앞서 자바에서 일반적으로 구성되는 메모리의 구조는 다음과 같습니다. 일반적으로 메모리는 크게 stack과 heap 두 파트로 나누어집니다. 이 둘에 대해서 자세히 알아보도록 하겠습니다. Stack 스택 프레임(혹은 Activation Record)을 저장하는 메모리 공간입니다. 스택 프레임은 메서드가 호출되기 이전의 상태를 기록하는 역할을 수행하며, 다음과 같은 내용들을 포함합니다. 매개 변수(Parameter) : 호출 메서드가 전달한 인자 값 지역변수(Local Variables) : 메서드내에서 선언한 변수 리턴 주소(Return Address) : 메서드실행을 마친 다음 실행할 명령문의 주소 리턴 값(Return Value) : 호출 메서드에게 돌려줄 값 즉 메서드 내에서 정의하는 기본..
프로세스? 쓰레드? 프로세스란 실행 중인 하나의 애플리케이션을 의미하고, 쓰레드란 한 프로세스 내에서 동작하는 여러 실행 흐름을 의미한다. 여러개의 쓰레드가 동시에 작동하는 것이 멀티 쓰레드이며, 멀티 쓰레드를 사용할 때에는 동기화(Synchronization)나 교착상태(Deadlock)와 같은 문제들이 발생할 수 있다. 여러개의 쓰레드가 자원을 공유해서 사용해도 괜찮을 수 있지만, 심각한 오류를 발생시키는 경우가 있다. 이럴 때 쓰레드들이 자원에 동시에 접근하는 것을 막기 위해서 synchronized라는 키워드를 사용해서 쓰레드들의 동기화 문제를 해결할 수 있다. 그러나 synchronized 키워드는 프로그램 성능에 굉장히 악영향을 미친다. ThreadLocal ThreadLocal은 자바의 cl..
애너테이션이란 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 마치 주석과도 같이 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다. (스프링에서 사용되는 에너테이션은 영향을 미치지만, 우선 스프링이 아닌 기본 자바를 기준으로 설명하겠다.) 표준 애너테이션 자바에서 기본적으로 제공하는 애너테이션은 몇 개 존재하지 않는다. 게다가 그들 중 일부는 '메타 애너테이션'으로 애너테이션을 정의하는데 사용되는, 애너테이션을 위한 애너테이션이다. 자바에서 기본적으로 제공하는 표준 애너테이션의 종류는 다음과 같다. 애너테이션 설명 @Override 컴파일러에게 메서드를 오버라이딩 하는 것이라고 알린다. @Deprecat..
HashSet HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션이며, Set 인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다. HashSet은 저장순서를 유지하지 않는다. 생성자 또는 메서드 설명 HashSet() HashSet 객체를 생성한다 HashSet(Collection c) 주어진 컬렉션을 포함하는 HashSet을 생성한다 boolean add(Object o) 객체를 저장한다 boolean addAll(Collection c) 주어진 컬렉션에 조장된 모든 객체들을 추가한다. void clear() 저장된 모든 객체를 삭제한다 boolean contains(Object o) 주어진 객체를 포함하는지 알려준다 boolean containsAll(Collection..
보호되어 있는 글입니다.
🧐 제네릭(Generic)이란? 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시에 타입 체크를 해주는 기능입니다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환을 하는 번거로움이 줄어듭니다. 😠 제네릭이 없었을 때의 문제점 예를 하나 들어보겠습니다. List list = new ArrayList(); list.add(1); int a = list.iterator().next(); //컴파일 에러 제네릭을 사용하지 않고 List만을 사용하여 작성한 코드입니다. 컴파일러는 마지막 라인에 대해서 에러를 발생시킬 것입니다. 제네릭을 사용하기 이전 List는 Object를 사용하여 모든 타입의 객체를 받아들일 수 있게 설계되었습니다. 따라서 해당 값을 사용하기 위..
🧐 Volatile 자바에서 지원하는 volatile이라는 키워드는 다음과 같은 특성을 가집니다. volatile로 선언된 변수가 있는 코드는 최적화되지 않습니다. volatile 키워드는 변수를 'Main Memory에 저장하겠다'라고 명시하는 것입니다. 변수의 값을 Read할 때마다 CPU cache에 저장된 값이 아닌, Main Memory에서 읽는 것입니다. 🧐 사용하는 이유 volatile키워드의 사용 이유를 알기 위해서는 메모리 구조를 알아둘 필요가 있습니다. 🧐 메모리 구조 보통의 메모리 구조는 다음과 같습니다. CPU 내에는 성능 향상을 위해서 L1 Cache가 내장되어 있습니다. CPU 코어는 메모리에서 읽어온 값을 캐시에 저장하고, 캐시에서 값을 읽어서 작업합니다. 값을 읽어올 때 우선..
자바의 표준 함수형 인터페이스 종류 자바 8부터 표준 API로 제공되는 함수형 인터페이스 java.util.function 패키지에 포함되어 있다. 매개타입으로 사용되어 람다식을 매개값으로 대입할 수 있도록 해준다. Consumer, Supplier, Function, Operation, Predicate 계열이 있다. 계열 입력 출력 메소드 설명 Consumer O X void accept(T) 입력을 소비 Supplier X O T get() 출력을 공급 Function O O T apply(R) 입력 -> 출력 함수 매핑 Operation O O T apply(T) 입력을 연산하여 동일 타입의 출력으로 리턴 Predicate O boolean boolean test(T) 입력을 판단 매개변수가 2개..
말 랑
'☕️ Java/기본' 카테고리의 글 목록 (4 Page)