자바 35

객체 생성 시 인스턴스 메서드는 힙 영역에 없다?

스태틱 영역에 존재하는 인스턴스 메서드 자바에서 new 연산자로 생성된 모든 객체는 JVM 내 단 하나의 힙(Heap)이라는 메모리 영역에 저장되어 모든 스레드가 이를 공유한다. 객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 이러한 속성과 기능을 그 객체의 멤버라고 한다. 이때 객체 생성자를 통해 객체를 생성하면 클래스에 정의된 속성(인스턴스 변수)과 기능(인스턴스 메서드)이 모두 해당 객체와 함께 힙에 생성되었을 것이라고 생각했었다. 하지만 놀랍게도 인스턴스 변수는 힙 영역(해당 객체 내)에 존재하지만 인스턴스 메서드는 힙 영역에 존재하지 않고 스태틱 영역에 단 하나만 존재한다. 어떻게 이런 일이 일어날 수 있는 것인가? 변수와 달리 메서드는 변하지 않는다. 우선 변수의 특징은 애플리케이..

Technology/Java 2022.03.20

Scanner close 반드시 해야할까?

그동안 관습적으로 close를 사용하지 않지 않았었다. 그동안 나는 Java 프로그래밍을 하면서 Scanner(System.in)로 키보드를 통해 사용자로부터 입력 받은 값을 읽어올 때 관습적으로 close를 하지 않는 습관이 있었다. 이때 사용자로부터 입력 받는 값은 Stream을 통해 입력받게 된다. 그런데 이 Stream 인스턴스를 다 사용하고 나서 close하지 않아도 과연 괜찮을까? Java Stream 공식 문서를 살펴보자. 일단 자바 Stream 인터페이스에 대한 공식 문서에서는 Stream에 대해 다음과 같이 언급하고 있다. Streams have BaseStream.close() method and implement AutoCloseable, but nearly all stream ins..

Technology/Java 2022.02.15

캡슐화(정보 은닉)를 위한 Java의 접근 제어자 이해하기

캡슐화란? 객체 지향에는 대표적인 4대 특성이 있는데 바로 추상화, 상속, 다형성, 캡슐화이다. 이 중 캡슐화는 정보 은닉이라고도 하는데, 서로 관련 있는 속성과 메서드를 클래스에 하나로 묶고 사용자가 필요로 하는 인터페이스만 제공하고, 나머지 내부적으로 구현된 내용은 외부로부터 감추는 것을 의미한다. 이덕에 사용자 입장에서는 별도로 복잡한 코드를 실행하지 않고(사용자의 실수 방지) 특정 인터페이스만 호출함으로써 원하는 결과를 얻을 수 있게 하며, 객체 입장에서는 클래스 내부에 선언된 데이터를 보호(수정 방지)할 수 있게 된다. 아울러 외부에 공개되지 않은 멤버의 경우 해당 클래스 외부로의 파급 효과가 없으므로 수정이 용이하다는 장점도 있다. 이때 자바에서 구현 내용을 내부에 감추는 방법으로 접근 제어자..

Technology/Java 2022.02.05

유클리드 호제법을 이용한 최대공약수 구하기 - Java

유클리드 호제법이란? 유클리드 호제법은 알고리즘 기초 문제 중 하나인 최대공약수 구하기를 해결하기 위한 방법 중 하나로 적은 연산으로도 최대공약수를 구할 수 있다. 여기서 호제법이란 두 수가 서로를 나누어 원하는 수를 얻는 알고리즘을 나타낸다. 이때 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 예를 들어, 99와 57의 최대공약수를 유클리드 호제법을 이용하여 구한다면, 다음과 같다. 99 % 57 = 42 → 나머지(42) != 0 57 % 42 = 15 → 나머지(15) != 0 42 % 15 = 12 → 나머지(12) != 0 15 % 12 = 3 → 나머지(3) != 0 12 % 3 = 0 → 나머지(0)..

Algorithm/Basic 2021.12.10

Java 프로그램의 실행원리(feat. JVM)

자바 프로그램의 실행원리? 자바를 통해 웹 개발을 하던 문득 "자바로 프로그래밍한 프로그램은 어떻게 실행되는 것일까?"라는 의문이 들었다. 우선 자바 프로그램이 동작하는 단계는 총 2단계로 컴파일 단계와 실행 단계로 나눌 수 있었는데 이를 다루기 먼저 자바 가상 머신(JVM, Java Virtual Machine)이라는 것을 다룰 필요성이 있다. 이는 아래 글을 참고해볼 수 있다. JVM이란 무엇인가? JVM 파헤쳐보기 JVM이란 무엇인가? JVM(Java Virtual Machine)은 앞서 언급했듯이 자바 가상 머신으로서 자바를 실행하기 위한 가상 기계(컴퓨터)라고 할 수 있다. 이때 가상 기계란 소프트웨어로 구현된 하드웨어로서 ikjo.tistory.com 컴파일 단계 자바 소스 코드 파일 우선 컴..

Technology/Java 2021.10.17