본문 바로가기

분류 전체보기44

Java - Abstract Class와 Interface의 차이 Java를 처음 접했을 때 Abstract Class의 차이와 Interface의 차이도 모르긴 했지만 더 중요한건 이 귀찮은 구조를 왜 써야하는지에 대한 의문이었다. 모든 답변은 객체 지향 관점에서 개발하기 위해서 라고 할 수 있겠다. 지금도 완전히 객체 지향적인 개발이란게 무엇인지 잘 모르겠지만 이론적인 측면에서 좋은 구조를 만들기 위해서는 추상화가 중요하다는 사실만은 머릿속에 들어있다. 오늘은 추상 클래스와 인터페이스의 차이에 대해서 알아보도록하겠다. Abstract Class 먼저 추상 클래스에 대해서 알아보도록 하겠다. 추상클래스는 class 내부에 추상 메소드가 하나 이상 포함되거나 class 앞에 abstract라는 표시가 있는 클래스이다. abstract 클래스는 상속해서 사용하기 위해 만.. 2022. 8. 4.
Java - String pool 알고리즘 문제를 풀다보면 이런 이야기를 한 번쯤 본 적이 있을 것이다. 루프문에서 문자열이 많이 사용되면 StringBuilder를 사용해라. 적은 시간, 메모리로도 틀렸다는 결과를 받을 수 있기 때문에 최소한의 메모리와 시간을 사용하는 것이 중요하기 때문이다. 문자열을 계속해서 concatenate하는 것은 메모리 상 엄청난 낭비가 된다. 다른 객체들과 다르게 String은 Pool을 가지고 있기 때문이다. 작동 방식 String s = "Hello"; s += " World!"; 위처럼 String에 World!를 더하면 어떻게 될까? 기존의 객체들에 새로운 값을 주면 객체의 값이 변경될 뿐이다. 그런데 String에 새로운 값을 주면 기존의 값이 사라지지 않고 Pool에 남아있게 된다. 즉 Stri.. 2022. 8. 3.
Java - 가비지 컬렉션(Garbage Collection)이란? 자바에서는 불필요한 메모리 할당을 제거하기 위해 가비지 컬렉션이라는 기능을 제공한다. JVM의 Heap 영역에 동적으로 할당된 메모리 중에서 사용하지 않는 부분을 주기적으로 회수하는 작업이다. C, C++을 사용하면 alloc을 한 후에 free를 반드시 해줘야 됐었다는 사실이 기억날 것이다. 자바에서는 free를 JVM에 탑재된 가비지 컬렉터가 알아서 해준다. 그렇기 때문에 개발자가 실수로 free를 안해줘서 OOM(Out Of Memory) 같은 Exception이 발생할 일이 적고 오로지 개발에만 더 집중할 수 있다는 장점이 있다. 그렇다고 메모리에 대해 전혀 신경을 쓰지 않아도 되는 것은 아니니 필요한 상황에는 생성된 객체를 제거하거나 메모리 할당을 해제 해주어야 하는 경우도 종종있다. 그런데 자.. 2022. 8. 2.
Java - 컴파일 과정 Java가 인기 있었던 이유 중 하나는 OS에 구애받지 않고 사용할 수 있었던 것이다. JVM을 사용하면 윈도우에서 작성했건 리눅스에서 했건 맥에서 했건 간에 모두 사용할 수 있다. JVM은 Java Virtual Machine으로 다양한 역할을 하지만 자바 바이트 코드를 운영체제가 이해할 수 있도록 바꿔주는 역할도 한다. Java가 운영체제마다 명령어 체계가 다르기 때문에 발생했던 문제점을 해결한 것이다. 물론 운영체제에 맞는 JVM을 설치해야한다는 점이 있긴 한데, 개발자들 입장에서는 같은 코드로 다양한 운영체제에서 사용할 수 있다는 것은 엄청난 메리트가 아닐 수 없었다. 그렇다면 Java가 컴파일 되는 과정을 좀 더 자세히 알아보도록하겠다. 1. 먼저 개발자가 *.java 파일인 실제 소스코드를 작.. 2022. 8. 1.