본문 바로가기

gyub's 공부일기/Java

(5)
[ JAVA ] 자바는 call by value? call by reference? 결론: 자바는 call by value입니다 => Call by reference는 원본의 주소값을 전달하므로, 원본을 변경할 수 있습니다. 왜냐하면 주소값을 통해 원본에 접근할 수 있기 때문입니다. 자바에는 포인터 같은 변수의 주소값을 추출 및 저장하는 기능이 없습니다. 그렇기에 call by reference가 될 수 없습니다. (아래 글은 참조에 관해 이해를 하시고 나서 보는 걸 추천드립니다.) 2021.03.24 - [gyub's 공부일기/Java] - [ JAVA ] 참조란? Call By Value ( 값에 의한 호출 ) Call By Value는 원본 값을 그대로 복사하여 매개변수로 전달하는 것입니다. public class JavaIsCallByValue { public static voi..
[ JAVA ] 참조란? TMI 자바를 공부하다보면 '참조' 라는 단어를 많이 보셨을거에요 이 '참조'라는 것을 공부를 해도...강의를 들어도.. 느낌상으로는 대충(?) 알겠지만 막상 온전히 제 것이 되는 느낌은 받지 못하셨던 분들을 위해 글을 써보겠습니다. (사실 제가 리마인드 차원에서 쓰는 글이에요,,, ) 얼마전에 자바를 입문한 친구가 참조를 정확히 자신에게 설명해줘라 라고 했을 때 "아 이게 그러니까..음 인스턴스가 있고 ,,," 뭐 깔끔하게 정리해서 설명이 잘 안 되더라구요 🤣 그럼 이제 '참조'란 무엇인지에 대해서 말해보겠습니다. 참조란 (아래 예제는 생활코딩-참조 편을 인용했습니다.) int a = 1; int b = a; System.out.println(a); 위의 코드에서 출력은 어떻게 될까요? 당연하게도 1이..
[JAVA] JVM 클래스로더 클래스로더의 역할은 Loading, Linking, Initialization로 3가지가 있습니다. 1) Loading: 클래스로더는 .class 파일을 읽어 바이트 코드를 메서드 영역에 저장합니다. 각 파일은 JVM에 의해 메서드 영역에 다음의 정보들을 저장합니다. - 로드된 클래스를 비롯한 그의 부모 클래스의 정보 - class 파일이 다른 Class, Interface, Enum과의 관련한 정보 - 변수나 메서드의 정보 등 .class 파일이 로딩된 후에는 JVM은 힙 메모리 영역에 이 파일이 나타내는 클래스 유형의 객체를 생성합니다. 2) Linking: 증명(verification), 준비(preparation), 해결(resolution) 3가지를 수행합니다. - 증명: .class 파일의 정..
[ JAVA ] JAVA의 동작 방식와 JVM 메모리 구조 1. 일반 프로그램과 비교 1) 자바는 JVM 위에서 실행되기 때문에 OS에 독립적입니다. - 즉, JVM만 설치한다면 OS에 상관없이 돌아갑니다. 2) JVM의 특징 - 자바 소스 코드 컴파일 후 생성된 파일이 해석(interpret)과 Link없이 바로 JVM에 적재 되고, OS로부터 메모리를 할당받아 GC(Garbage Collection)를 통해 스스로 메모리 관리를 한다는 특징이 있습니다. 2. Java 동작 방식 1) 작성한 자바 소스(.java)를 자바 컴파일러(javac)를 통해 자바 바이트 코드(.class)로 컴파일 합니다. - 자바 바이트 코드: JVM이 이해할 수 있는 코드로 아직 컴퓨터는 읽을 수 없는 반기계어이다. 자바 바이트 코드의 각 명령어는 1바이트 크리의 Opcode와 추..
[ JAVA ] Java의 특징 및 JVM, JDK, JRE 1. Java의 특징 1) JVM만 설치하면 컴퓨터의 운영체제에 상관없이 동작한다. 2) 가비지컬렉터(GC)가 메모리 관리를 해준다. 3) 객체지향 프로그래밍 언어이다, * 객체지향 프로그래밍이란? - 객체를 만들기 위한 설계도인 클래스를 작성하고 - 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어낸다. - Java는 객체지향 언어가 가져야 할 캡슐화, 상속, 다형성 기능을 완벽하게 지원한다. 4) 멀티스레드를 쉽게 구현할 수 있다. - 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있습니다. 5) 동적 로딩(Dynamic Loading)을 지원한다. - 애플리케이션이 실행 될 때 모든 객체가 생성되지 않고, 각 객체가 필요한 시점에 클래스를 동적 로딩해서 생성한다. - 또한, ..