Mhwan's Study/JAVA & Kotlin
-
[Kotlin] 일반적인 접근 VS getter로 접근Mhwan's Study/JAVA & Kotlin 2021. 8. 21. 01:48
kotlin에 대해 공부하다가 Kotlin에서는 변수등 필드에 대한 접근자(getter, setter)를 정의할 수 있는데, 이것과 일반적으로 변수 등의 필드에 접근하는 방식의 차이가 궁금했습니다. 제가 잘못 찾았을 수도 있지만, 둘의 차이가 적힌 블로그는 아직 보지 못한것 같군요..ㅠ 간단하게 보면 변수 a는 일반적인 접근으로 sample의 v값을 가져옵니다. 그리고 b는 getter를 정의해 sample의 w를 가져옵니다. 이 둘의 차이가 무엇일까요? 그리고 언제 쓰면 좋을까요? 우선 sample클래스에는 v, w라는 변수 모두 mutable한 변수로 3을 넣어줬습니다. 그리고 각각 두번 print를 해볼 것인데 a를 통해 v를 가져온 값을 프린트하고, v의 값을 10 증가시키고, 다시 a를 통해 v..
-
[Java & Kotlin] Java와 Kotlin의 접근 제한자 (가시 제한자)Mhwan's Study/JAVA & Kotlin 2021. 8. 13. 22:39
흔히들 접근제한자라고 부르는 것은 kotlin에서는 맞지 않습니다. Java와 kotlin은 그 차이가 있기 때문에 Kotlin에서도 Visibility Modifiers(가시 제한자)로 명명하고 있습니다. # Java's Access Modifiers public : 어떤 클래스에서든 접근 가능 protected : 동일 패키지의 클래스 + 외부 패키지에 있는 해당 클래스를 상속 받은 클래스에서 접근 가능 default : 동일 패키지의 클래스에서만 접근 가능 private : 해당 클래스 내에서만 접근 가능 public > protected > default > private으로 범위가 제한됩니다. 따라서 protected의 경우 private와 default에서 접근 하는 범위가 가능하면서 외부 패..
-
[JAVA] Reflection & SerializableMhwan's Study/JAVA & Kotlin 2021. 8. 10. 00:55
리플렉션과 Serializable을 공부하면서 Serializable이 내부적으로 리플렉션을 이용하기 때문에 같이 포스팅합니다. Reflection 리플렉션은 run-time에 동적으로 클래스들의 정보를 알아내고, 실행할 수 있는 것을 말합니다. 일반적인 객체 생성은 compile-time에 우리가 작성한 클래스와 메소드가 컴파일되어 JVM의 메모리 영역에 올라와 있는데, 리플렉션은 그것이 아니라 run-time에 되는 것이 가장 큰 차이일 것입니다. 그래서 reflection을 통해 클래스를 분석하고(객체의 생성자, 변수, 메소드 private 포함) 객체를 만들고, 메소드를 실행할 수도 있게 됩니다.(Reflection을 쓰면 private으로 된 메소드를 호출할 수도 있습니다.) 리플렉션을 제가 써..
-
[Kotlin] Kotlin의 컴파일 과정 & Kotlin VS JAVA (Annotation Processor)Mhwan's Study/JAVA & Kotlin 2021. 8. 9. 02:47
이 글은 코틀린을 이미 어느정도 아시는 분들을 위한 포스팅입니다. 코틀린을 모르시는 분들에게는 다소 불친절할 수 있으니 양해부탁드립니다. 다들 이미 아시겠지만 코틀린은 JVM위에서 동작하며, JAVA와 마찬가지로 정적 타입 프로그래밍 언어입니다. * 정적 타입(Statically typed) 프로그래밍 언어 : 타입 즉, 자료형을 컴파일 타임에 결정하는 프로그래밍 언어입니다. 장점 : 컴파일 타임에 타입에 대한 정보가 결정되어 런타임에 메소드를 더 빨리 호출할 수 있습니다. 안정성또한 올라 갑니다. (C, C++, JAVA, Kotlin 등) 단점 : 타입을 런타임에 결정하는 프로그래밍 언어로 런타임까지 타입에 대한 결정을 미룰 수 있어 다양한 선택지를 가질 수 있는 이점을 가집니다. (단 안정성이 그만..
-
[JAVA/DataType & String] 데이터 타입과 String에 대해Mhwan's Study/JAVA & Kotlin 2021. 1. 21. 03:31
# Primitive Type VS Reference Type Primitive Type (원시형) : 자바의 기본적인 자료형으로 Stack 영역에 저장됩니다. - 정수형 : byte (1byte), short (2byte), int (4byte, 약 20억까지 표현가능), long (8byte) - 실수형 : float (4byte), double (8byte) - 논리형 : boolean (1byte) - 문자형 : char (2byte) Reference Type : 원시형을 제외한 모든 자료형, new키워드를 이용해 생성되는 데이터로, 모두 Heap 영역에 저장됩니다. (GC의 대상) # Wrapper class byte (Byte), short (Short), int (Integer), long..
-
[JAVA/Garbage Collection] 가비지 컬렉션에 관하여Mhwan's Study/JAVA & Kotlin 2021. 1. 21. 00:38
자바는 다른 언어와 달리 개발자가 직접 객체를 메모리에서 해제하지 않아도 됩니다. 바로 Garbage Collector가 있기 때문인데, GC는 힙 메모리 영역에 존재하는 객체를 메모리에서 삭제하는 역할을 합니다. # GC의 대상 1. 객체가 Null인 경우 2. 블럭 실행 종료 후, 블럭 안에서 생성된 객체 3. Null인 부모객체를 포함하는 자식 객체 현재 사용하지 않는 객체를 힙에서 지우는 것으로 가비지 컬렉션의 과정을 Mark And Sweep이라고 합니다. - Mark : JVM의 가비지 컬렉터가 스택에서 참조하고 있는 힙에 있는 영역을 모두 마킹합니다. 이 마킹 작업을 위해 현재 작업중인 모든 스레드를 중단(stop the world)하며, 이 때문에 System.gc()를 함부로 호출하면 안..
-
[JAVA/JVM & Compile] JVM과 컴파일Mhwan's Study/JAVA & Kotlin 2021. 1. 19. 02:23
JAVA는 OS에 독립적으로 실행되는 특징을 갖고 있다. 이는 JVM이 있기 때문에 가능한데, JVM은 자바 프로그램이 기기나 운영체제 상관없이 실행 될 수 있게 하며, 프로그램 메모리(스택, 힙 영역의 관리)를 관리하고 최적화한다. # JVM의 구성요소 Class Loader, Execution Engine, Runtime Data Area, Garbage Collector 여기서 Runtime Data Area (JVM의 메모리 영역 (메소드, 스택, 힙, PC 레지스터, 네이티브 메소드 스택)), Garbage Collector는 이후 더 자세히 적어보려고 한다. # 컴파일 과정 Java compiler가 소스코드를 컴파일해 바이트 코드(.class)로 변환한다. 바이트 코드는 JVM은 읽을 수 있..
-
[JAVA/Hash] JAVA의 HashMap과 충돌(Collision) 문제Mhwan's Study/JAVA & Kotlin 2021. 1. 9. 23:33
Hashmap이라는 자료구조를 java에서 내부적으로 어떻게 저장되는지, 해시 충돌과 관련된 내용입니다. # HashMap & HashTable 두 구조 모두 Hash를 사용해 Key, value 형태로 저장되는 자료구조입니다. - HashMap : JDK 2.0에서 부터 생긴 API로 현재까지 꾸준히 업데이트 되고 있습니다. - HashTable : JDK 1.0부터 있던 API로 현재는 자주 사용되지 않습니다. 가장 큰 차이로는 동기화(Synchronization)의 차이입니다. 먼저 HashMap의 경우 동기화를 지원하지 않기 때문에 멀티 쓰레드 환경에서 문제가 발생할 수 있습니다. HashTable의 경우 동기화를 지원해 멀티 쓰레드 환경에서 안전합니다. 하지만 현재 ConcurrentHashMa..