Web/Java19 GC (Garbage Collector) 지난 시간에는 간략하게나마 JVM의 구성과 동작원리에 대해서 알아보았다. 오늘은 JVM의 구성 중 하나인 GC, 가비지 콜렉터에 대해서 알아보자. Garbage Collector 직역해보자면, 쓰레기를 모으는 친구이다. 1. 뭐하는 친구인가? 가비지 콜렉터는 Heap 영역에서 활동하는 친구이다. 지난 시간에 알아봤듯이, Heap 영역에는 배열과 new 연산자를 통해 생성되는 객체들이 적재되는 메모리 공간이다. 그렇다. 가비지 콜렉터는 이 친구들 중에서 쓰레기가 되는 친구들을 제거하는 역할을 하는 것이다. 2. 그렇다면, 어떤 객체들이 쓰레기가 되는 것일까? 메모리 공간은 한정적이다. 오랜 기간동안 사용되지 않는 객체 친구들은 메모리 공간을 차지하기만 할뿐 프로그램을 실행하는 데 있어 큰 역할을 하지 못한.. 2021. 9. 5. JVM (Java Virtual Machine) 자바 유저라면 자바 프로그램이 어떤 과정을 거쳐 실행되는지와 메모리 구조에 대해서는 알아두는 것이 좋다고 생각이 오늘 이 글을 포스팅한다. JVM이란? 자바 프로그램은 완전한 기계어가 아닌 바이트 코드(.class)이기 때문에 운영체제가 바로 실행할 수 없다. 그렇기 때문에 운영체제를 대신해서 자바 프로그램을 실행해줄 녀석이 필요한데, 그게 바로 JVM이다. Java Application 실행 과정 1. 자바 프로그램을 실행하면 JVM이 해당 프로그램을 실행하는 데 필요한 메모리를 OS로부터 할당 받는다. 2. 자바 컴파일러(javac)가 자바 파일(.java) -> 클래스 파일(.class, 바이트 코드)로 변환한다. 3. 이렇게 변환된 class파일들은 Class Loader에 의해서 JVM 메모리 .. 2021. 9. 1. Comparable과 Comparator 자바로 알고리즘 문제를 푸는 경우, 사용자 정의 클래스를 정렬하는 경우를 빈번하게 만날 수 있다. 이 경우에는 Comparable 혹은 Comparator 인터페이스를 구현해 정렬을 하게 된다. 오늘은 이 두 인터페이스에 대해 간략하게 알아보자. ◆ Comparable TreeSet과 TreeMap은 정렬을 위해 java.lang.Comparable을 구현한 객체를 요구한다. Integer, String 등은 모두 Comparable 인터페이스를 구현하고 있기 때문에 우리가 따로 구현해줘야 하는 부분이 없다. 따라서 사용자 정의 클래스도 Comparable 인터페이스의 compareTo() 메소드를 Override해주면 TreeSet, TreeMap에서 자동으로 정렬이 가능하게 된다. public cla.. 2021. 8. 10. Stream - (2) 스트림 얻기 지난 시간에는 스트림이란 무엇인지에 대해 간략하게 알아보았다. 오늘은 스트림을 얻는 방법에 대해 알아보자. 1. 소스에 따른 스트림 구현 객체 얻기 리턴 타입 메소드 (매개 변수) 소스 Stream java.util.Collection.stream() java.util.Collection.parallelStream() Collection Stream IntStream LongStream DoubleStream Arrays.stream(T[]), Stream.of(T[]) Arrays.stream(int[]), IntStream.of(int[]) Arrays.stream(long[]), LongStream.of(long[]) Arrays.stream(double[]), DoubleStream.of(doub.. 2021. 7. 19. Stream - (1) 스트림이란? 오늘은 자바 8부터 추가된 컬렉션의 저장 요소를 하나씩 참조하여 람다식으로 처리할 수 있도록 해주는 반복자인 Stream에 대해 알아보고자 한다. 1. 반복자 // 자바 7 이전까지 컬렉션 요소 iterator를 활용한 순차적 처리 List nameList = Arrays.asList("A", "B", "C"); Iterator iter = list.iterator(); while(iterator.hasNext()) { String name = iterator.next(); System.out.println(name); } // 자바 8 이후 Stream을 이용한 순차적 처리 List nameList = Arrays.asList("A", "B", "C"); Stream stream = list.strea.. 2021. 7. 12. 인터페이스 (Interface) 인터페이스 객체의 사용 방법을 정의한 타입이다. 인터페이스 선언 [ public ] interface 인터페이스명 { ... } 상수와 메소드만을 필드 값으로 가질 수 있다. 객체로 생성할 수 없으므로 생성자를 가질 수 없다. 자바 8부터는 default 메소드와 static 메소드 선언이 가능하다. 각각의 특성들은 생략하더라도 컴파일 과정에서 자동으로 붙게 된다. inteface Sample { // 상수 // 추상 메소드 // default 메소드 // static 메소드 } 상수 필드 (Constant Field) 인터페이스는 런타임 시 데이터를 저장할 수 있는 필드를 선언할 수 없다. 상수를 선언할 때에는 반드시 초기값을 정의해줘야 한다. public static final 타입으로 선언한다. 인.. 2021. 3. 30. 추상 클래스 (Abstract Class) 추상 클래스 객체를 직접 생성할 수 있는 클래스들의 공통적인 특성을 추출해 선언한 클래스를 말한다. 추상 클래스와 실체 클래스는 상속의 관계를 지닌다. 추상 클래스가 부모이고 실체 클래스가 자식으로 구현된다. 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적인 특성(필드, 메소드)을 지닐 수 있다. 실체 클래스의 공통되는 필드와 메소드를 추출해 만들어졌으므로 new 연산자를 통해 인스턴스를 생성시키지 못한다. 추상 클래스는 새로운 실체 클래스를 만들기 위한 부모 클래스로만 사용된다. 추상 클래스를 만드는 이유는 무엇일까? 실체 클래스들의 공통된 필드와 메소드의 이름 통일 실체 클래스 작성 시간 절약 추상 클래스 선언 public abstract class 클래스 { // 필드 // 생성자 // .. 2021. 3. 30. Array와 Collection Framework의 차이는?! Java를 사용하는 개발자라면 한 번쯤은 배열과 컬렉션 프레임워크의 차이에 대해 알아봤을 것이다. 혹여나 아직 이 둘의 차이에 대해 모르는 분들을 위해 간단하게 Array와 Collection Framework의 차이를 알아보자. 1. Array의 특징 자료형이 동일해야 한다. 크기가 고정된다. index를 통한 검색이 용이하다. 연속적이기 때문에 메모리 관리가 편하다. (주소값이 연속적이다.) 데이터의 추가, 삭제가 번거롭다. index의 위치에 새로운 데이터를 추가하는 경우, index ~ 마지막 요소위치까지 한 칸씩 뒤로 이동시켜줘야 한다. 반대로 삭제 시에는 index + 1 ~ 마지막 요소를 앞으로 한 칸씩 이동시켜줘야 한다. 2. Collection Framework의 특징 자료형이 동일해야하.. 2021. 3. 26. Exception, 개발자의 숙명! 예외란? 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 발생하는 프로그램 오류를 말한다. 예외의 종류 일반 예외 (Exception) 실행 예외 (RuntimeException) - 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문에 컴파일러 체크 예외라고도 한다. - 예외 처리 코드가 없다면, 컴파일 오류가 발생한다. - Exception 클래스를 상속받지만 RuntimeException을 상속받지 않는 클래스들이다. - 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다. - RuntimeException을 상속받은 클래스들이다. - 자바 컴파일러가 체크를 하지 않기 때문에, 개발자의 경험에 의해서 예외 처리 코드를 삽입해야 한다. # ClassNotFoun.. 2021. 3. 24. 이전 1 2 3 다음