본문 바로가기

gyub's 공부일기

(41)
String Literal ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ String Literal //1 String s1 = "abc" //2 String s2 = new String("abc") literal은 쌍따옴표 안의 문자열을 말함. 위 예제 1번처럼 literal을 통해 String 객체가 생성. 2번과 같이 new 연산자를 통해 생성하는 String 객체와는 내부적으로 다름. 자바에서 객체 생성 시 객체를 참조하는 변수(s2)는 Stack 메모리, 객체는 Heap 메모리에 저장이 된다. 하지만 literal을 통해 생성된 String 객체는 Heap 메모리에 저장 되는 것이 아닌, 별도의 공간인 String Constant Pool(상수풀)에 저장이 된다. String Constant Po..
Activity LifeCycle ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ View가 그려지는 과정 Activity LifeCycle onCreate() 액티비티가 처음 생성될 때 호출 onRestart() 액티비티가 중단 되었다가 다시 시작되기 직전에 호출 onStart() 액티비티가 사용자에게 보여지기 직전에 호출. 액티비티가 foreground로 나오면 onResume()이 따라오고, 액티비티가 숨겨지면 onStop()이 호출. onResume() 액티비티가 화면에 보여지고 사용자와 상호작용하기 직전에 호출. 이 시점에 액티비티는 액티비티 스택 최상단에 위치. onPause() 다른 액티비티로 넘어가거나, 뒤로 가기를 누르거나, 홈으로 돌아가는 등 현재 액티비티가 사라지기 직전에 호출. 데이터를 유지하..
View Lifecycle ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ View Lifecycle Constructor 모든 뷰는 생성자에서 출발 -> 생성자에서 초기화 -> defalut 값 설정 뷰는 초기 설정을 쉽게 하기위해 AttributeSet 인터페이스 지원=> 먼저 attrs.xml파일을 만들고 이걸로 뷰의 설정을 쉽게 한다. onAttachedWindow 부모 뷰가 addView(childView)를 호출 -> 자식 뷰는 윈도우에 붙음(attached) 이때부터 뷰id를 통해 접근 가능. onMeasure 뷰의 크기를 측정하는 단계. 대부분 레이아웃에 맞게 특정 크기를 가져야함. 세 단계 과정이 있음 1) 뷰가 원하는 사이즈 계산 2) MeasureSpec에 따라 크기와 mode를 가져옴 ..
View가 그려지는 과정 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ View가 그려지는 과정 뷰 포커싱 -> 레이아웃 그리도록 요청 -> 루트노드(최상단 부모 뷰)에서부터 트리를 따라 전위순회 -> 부모 뷰는 자식 뷰 뒤에 그려짐 -> 형제 뷰는 전위 방식에 따라 그려짐 ( 즉, 그저 전위순회를 따라 그려짐. 다만 먼저 그려지는 부모 뷰는 자식 뷰의 뒤에 그려진다는 것을 생각.) 전위순회(Pre-order Traversal) root -> Left -> Right ( 부모노드 -> 왼쪽 자식 노드 -> 오른쪽 자식 노드) A - B - C - E - D - F - G 레이아웃을 그리는 과정은 측정(measure) 단계와 레이아웃(layout)단계로 그려진다. measure 메서드 public fina..
[ 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와 추..