개발/java 8

JVM 클래스 로드

클래스 로더란?클래스 로더는 컴파일 된 자바의 class 파일을 동적으로 로드하고 JVM 내 Runtime Data Area에 배치하는 작업을 수행한다.클래스 로더에서 class 파일을 로딩하는 순서는 아래 세단계로 이루어진다.Loading : 클래스 파일을 가져와서 메모리에 로드Linking : 검증Initialization : 변수 초기화이때 로딩 기능은 한번에 메모리에 올리는 것이 아니라 어플리케이션 내에 필요한 경우에 동적으로 메모리에 적재한다.우리는 클래스나 클래스 내의 static 멤버들은 실행과 동시에 메모리에 올라간다고 착각하기 쉽다.하지만 생각해보면 언제 사용할지도 모르는데 모두 올리는 건 비효율적이라는 것을 알 수 있다.결과적으로 JVM은 모든 클래스를 메모리에 올리는 것이 아니라 클래..

개발/java 2024.08.27

[JAVA]객체지향과 객체지향 프로그래밍(OOP)

들어가기 전 먼저 이 글을 쓰게 된 계기를 말하자면 스프링과 자바를 이용해서 개발하는 중에 이런 생각이 들었다. '그래서 쓰는 법은 알겠는데 controller - service - repository 구조에서 각각의 클래스들을 활용한게 어떤 의미에서 객체지향 프로그래밍이라는거지?' (이걸 생각하기까지 1년 반이 걸린 나에게 충격이였다.) 답을 찾기 위해 객체지향프로그래밍 즉 OOP가 정확히 어떤것인가를 공부하다가 도저히 이해가 안가서 OOP를 공부하기 이전에 OOP의 본질 객체지향이라는 것이 무엇인가를 찾아보았고 와중에 조영호님의 '객체지향의 사실과 오해'를 읽고 내가 이해한 바를 정리하기 위해 쓰게 되었다. 1. 객체지향이란? 우선 객체지향 패러다임이 왜 등장했는지는 다른 분들이 많이 이야기한다. 나..

개발/java 2023.07.31

[JAVA]클래스, 객체, 인스턴스

클래스, 객체, 인스턴스 객체 다른 글들을 보면 프로그래밍에서 객체라는 것은 소프트웨어 세계에서 구현될 대상, 클래스에 정의된 그대로 생성된 실체라고들 한다사실 이 부분이 많이 이해가 안갔다 누군가는 실세계에 존재하는 것이 객체라고도 하며 누군가는 소프트웨어에서 생성된 실체 라고 하는데 뭐가 맞고 틀린지는 크게 중요하지 않은 것 같다.  우선 우리는 개발자다. 개발자 관점에서라면 소프트웨어를 구현하는 과정에서 어떤식으로 바라볼지가 중요하다. 이런 의미에서 내가 생각한 객체라는 것은 실세계의 구현할 객체를 소프트웨어 세계에 실체화 한 것을 객체라고 생각한다. 즉 다시 말해 우리가 만들고자 했던 실세계의 어떠한 객체를 프로그램에 실제로 생성된 것을 객체라고 본다는 의미이다.  이러한 맥락에서 객체가 가지는 ..

개발/java 2023.07.20

[JAVA]Call By Reference, Call By Value

프로그래밍에서 메소드 매개변수 호출 방식에는 call by reference와 call by value 두가지 방식이 있다. call by reference - 직역을 하자면 참조에 의한 호출이다. call by value - 값에 의한 호출.저렇게 적어놓으면 뭔가 더 없나 하겠지만 정말 저게 전부다. 우선 자바에서 저 두개를 이해하기 전에 JVM을 알고 있다면 훠어얼씬 이해하기 쉽다. 만약 자세하게 모른다면 아래 두개만 우선 기억하자자바에서는 다른 메소드를 호출하게 될 경우 스택이라는 영역 내에 프레임이라는 메소드의 상태 정보를 가지고 있는 하나의 단위가 들어간다. 자바에서 원시 타입의 변수는 스택 프레임 안에서 값과 함께 생성된다. 참조 타입의 변수는 실제 객체의 값은 Heap 영역에 생성되고 해당 ..

개발/java 2023.07.14

[JAVA]JVM

JVM과 자바 어플리케이션 JVM은 자바 프로그램을 실행하기 위한 소프트웨어이다. 다시 말해 결국 JVM도 일종의 프로그램이다. 그렇기 때문에 자바 어플리케이션을 실행 시키면 우선 JVM이 OS로부터 메모리를 할당을 받는다. 이후 .java 파일의 소스 코드를 컴파일 하여 나오는 바이트 코드를 해석하고 실행하는 역할을 한다. public class Main { public static void main(String[] args) { Audio audio = new Audio(); } } class Audio { final static String color = "WHITE"; int volume; void volumeUp() { this.volume += 1; } void volumeDown() { th..

개발/java 2023.07.06

[JAVA]String

1.시작하기 전 동일성과 동등성 동일성은 비교하는 두 객체가 완전히 같은 것을 의미한다. 다시 말해 두 객체는 하나의 객체로 봐도 무방하다라는 뜻이며 해당 두 객체의 주소값은 같은 주소값을 가리킨다. 동등성은 두 객체가 가지고 있는 값은 같지만 서로 다른 객체라는 것을 의미한다. 쉽게 말하면 주소값은 다르지만 두 객체가 가지고 있는 값은 같다라고 볼 수 있다. 자바에서는 동일성을 확인하기 위해서는 == 을 사용하고 동등성을 확인하기 위해서는 equals 메소드를 사용한다. equals 메소드는 모든 객체들의 부모 객체인 Object 객체에서 구현하고 있으며 해당 메소드의 구현을 보면 == 을 사용하여 결과를 return 한다. 따라서 해당 메소드를 오버라이딩 하여 재정의 하지 않고 쓴다면 결국 동일성을 ..

개발/java 2023.07.04

[JAVA]JVM, JRE, JDK

JVM(Java Virtual Machine) JVM은 일종의 프로그램이다. 우선 JAVA와 C와 같은 언어들은 컴퓨터가 알아들을 수 있도록 소스 코드를 컴파일 하여 기계여로 변환하는 과정을 거친다. 하지만 c나 c++ 등의 언어들은 각 OS에 맞는 컴파일러가 없다면 윈도우에서 개발한 프로그램이 다른 OS에서는 동작하지 않는다. 하지만 JAVA는 "Write once, Run anywhere"라는 모토를 가지고 있다. 말 그대로 한 번 작성되면 다른 운영체제에서도 동일하게 실행 될 수 있다는 의미이다. 이를 가능하게 하는 것이 JVM이다. 각 OS 별로 JVM이라는 통역사를 둔다고 생각하면 이해하기 편하다. JAVA는 컴파일러((javac)가 컴파일시에 작성된 코드(.java 파일)를 바로 기계어로 변환..

개발/java 2023.07.03

[Java]Map getOrDefault

getOrDefault 프로그래머스 문제를 푸는 중 getOrDefault라는 api를 접했다. 해당 api는 Java 8 에서 추가된 Collection API 중 하나이다. Map에 추가된 API로 아래 코드와 같이 구현되어 있다. default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; } 1. 임시변수 v를 선언한 후 get(Key)를 통해 얻은 값을 저장한 후 null이 아닌지를 확인한다. 2. contains(key)를 통해서 해당 키가 존재하는지 다시 한번 확인 3. 둘 다 false일 경우 파라미터로 넘긴 defa..

개발/java 2023.06.27