CS/Java
[Java] Garbage Collection(GC)의 동작 원리
가비지 컬렉션(GC)이란?가비지 컬렉션(GC)란 자바의 메모리 관리 방법이다. JVM 상의 Heap 영역에서 동적으로 할당했던 메모리 중 더 이상 사용하지 않는 메모리 객체(가비지)를 모아 주기적으로 제거하는 프로세스이다. 기본적으로 Heap 영역의 메모리는 객체 생성 시에 할당되므로, 더 이상 참조되지 않는 경우에 가비지로 판단되어 제거된다. 이러한 가비지가 제거되지 않는다면, 메모리가 해제되지 않아 사용할 수 있는 메모리가 점점 줄어드는 메모리 누수(Memory Leak)이 발생하게 되므로 중요하다. Stop -The-World란?Stop-The-World란, GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다.GC를 수행하는 동안, GC 관련 쓰레드를 제외한 모든 쓰레드는 정지되므로..
Java의 Collections Deep Dive - 1 : HashMap이란?
안녕하세요,오랜만에 블로그를 적어봅니다! 최근 Redis의 Hash 자료구조를 비롯해 여러 Hash계열 자료구조를 사용하면서 내부적인 구현에도 조금씩 차이가 있다는 점을 알게 되었습니다! 또한 평소 Stream이나 Lambda를 사용할 때 Collections이라는 인터페이스에 대해 다소 이해가 부족한 것 같아 여러 기술블로그를 참고하여 학습하고 정리한 것을 포스팅하고자 합니다. Map에 대해서우선 자바의 Collection이란, 데이터의 집합, 그룹을 의미한다. 이중 Map은 Interface이며, 엄연히 Collection 인터페이스를 상속받는 것은 아니다.이는 구조상의 차이 때문이지만, Map 인터페이스 역시 Collection의 구성원 중 하나이다. Map이란, key-value로 구성된 Ent..
@Override가 뭐야?
1. 오버라이딩이란? 오버라이딩이란, 참조하는 클래스의 메서드를 맥락에 맞게 재정의하여 사용하는 것입니다. 쉽게 말하면, 조상 클래스에서 상속받은 메서드의 내용을 변경하는 것이죠. 대신 조상 클래스에서 상속받은 메서드를 재정의하는 것이므로 다음과 같은 조건을 충족시켜주어야 하는데요, 메서드의 이름이 같아야 한다. 메서드의 매개변수 타입, 개수가 같아야 한다. 메서드의 return type이 같아야 한다. 위 세 가지는 반드시 지켜야 오버라이딩이 가능합니다. 2. @Override 애너테이션은 꼭 사용해야 할까? 먼저 애너테이션이란, 일종의 주석 같은 개념으로써 주로 컴파일 시에 컴파일러에게 정보를 제공하는 목적으로 사용됩니다. @Override 애너테이션을 붙이면, 해당 메서드가 조상의 메서드를 오버라이..
[자바] 인터페이스는 객체지향의 4대 특성중에 무엇을 지니는가?
객체지향의 4대 특성은 캡슐화, 추상화, 상속성, 다형성이다. 인터페이스를 이용하면 해당 4가지 특성 중 추상화를 충족시킨다고 생각합니다. 인터페이스는 언뜻 추상 클래스와 비슷한 특성을 보이지만, 그 목적은 함수의 구현을 강제하는 데에 있습니다. 이를 통해서, 인터페이스를 구현하는 모든 클래스는 인터페이스에서 구현을 강제하는 모든 기능을 갖추어야 하고, 이에 따라 통일된 규격을 갖출 수 있다는 것이 장점입니다. 상속과는 달리 불필요한 속성과 기능을 강제로 상속받지 않아도 되기 때문에, 상속에 비해 결합도가 낮다는 것도 특징입니다. 인터페이스를 통해 공통적인 부분을 추상화함에 따라서 프로그래머가 캡슐화나 다형성을 잘 살린 프로그래밍을 가능하게 하는 필수적인 특성이라고 생각합니다.
[자바] 객체지향의 4가지 특성
1. 캡슐화 캡슐화(encapsulation)이란, 추상화의 한 종류로 객체의 속성과 메서드를 묶고, 필요한 부분만 외부에 공개하는 방식으로 불필요하게 노출될 필요가 없는 내부 구현 정보를 숨기는 것이다 예시 코드로, 제 지갑을 소개합니다. 총 금액을 알려주는 기능과, 돈을 지불하는 기능을 갖추고 있습니다. public class Wallet { private int money; public Wallet(int money){ this.money = money; } public int getTotalMoney(int price) { return this.money; } private void substractMoney(int charge) { money -= charge; } } 자바에서 캡슐화를 가능하게..