본문 바로가기
반응형

학습146

객체지향과 4대 특성 객체란? 현실세계의 구체적인 사물(Object)과 더불어 정신적인 영역까지 포함한 하나의 "개념"으로 정의할 수 있는 모든 것입니다. 객체지향이란? 객체지향이란 시스템을 하나의 공동체로 바라보고 자율적인 객체들이 서로 상호작용하도록 객체를 이용해 시스템을 분할하는 것입니다. 객체지향의 시작은 객체에 적절한 책임을 부여는 것. 객체 간의 요청과 응답하는 협력으로 시스템이 구성됩니다. 자율적인 객체란, 상태(varaible), 행위(method)를 가지며 스스로 자신을 책임지는 객체를 의미합니다. 상태, 속성(Variable) 객체는 상태 정보를 저장하고 유지해야 하는데 이러한 속성은 변수로 정의됩니다. 속성 값이 바뀜으로써 객체의 상태가 변경될 수 있습니다. 기능(method) 외부로부터 직접 속성에 접근.. 2022. 11. 2.
mutable vs immutable 개요자바의 클래스는 mutable과 immutable 2가지가 존재합니다. 2개의 차이점을 알아보겠습니다.  mutable과 immutable 사전의 의미를 먼저 확인해보겠습니다. mutable은 '변할 수 있는', immutable은 '변경할 수 없는, 불변의'의 뜻을 가지고 있습니다. 이를 Java 관점에서 본다면 mutable 객체는 초기화 된 이후 '변할 수 있는' 객체이고, immutable 객체는 초기화된 이후 '변경할 수 없는' 객체입니다.   mutable  mutable 객체는 초기화 된 이후에 필드, 상태 등 값을 변경할 수 있습니다. 새로운 객체가 생성되는 것이 아니고 현재 객체의 값을 변경합니다. mutable 객체들은 getter와 setter 사용이 가능합니다. Java.util.. 2022. 11. 1.
StringBuffer vs StringBuilder 개요자바는 연속되는 문자열을 표현하기 위한 3가지 클래스가 있은데, String, StringBuffer, StringBuilder입니다. 3가지의 차이점을 비교해보겠습니다.  String과의 차이점String은 immutable 클래스StringBuffer와 StringBuilder는 mutable 클래스 StringBuffer vs StringBuilderNoStringBufferStringBuilder1)동기화되어 thread-safe(여러개의 쓰레드가 StringBuffer 메서드를 동시에 접근할 수 없다)동기화되지 않아 쓰레드에 안전하지 않음(여러개의 쓰레드가 StringBuilder 메서드를 동시에 접근할 수 있다)2)Java 1.0에서 등장Java 1.5에서 등장3)동기화 때문에 상대적으로 .. 2022. 11. 1.
Java 8에 등장한 Optional이란? 개요 Java 8에 Optional이 새로 등장했습니다. 어떤 문법인지 어떤 경우에 사용하는지 정리합니다. 코드 가독성을 높이고 널 포인트 예외를 방어해보자 널(Null)은 값이 없음을 가리키며 널 참조는 많은 문제의 원인이 됩니다. 따라서 Java 8에서는 이런 문제점을 일부 해결하기 위해서 java.util.Optional을 만들었습니다. 다음과 같은 코드가 있다고 가정해보겠습니다. String version = computer.getSoundcard().getUSB().getVersion(); 코드에는 문제가 없지만 많은 컴퓨터는 사운드 카드를 가지고 있지 않습니다. 그렇다면 getSoundcard()는 어떻게 될까요? 대게의 경우 null을 리턴해서 사운드 카드가 없다는 것을 가리켰습니다. 불행히.. 2022. 10. 29.
자바 8에 추가된 Date Time API 개요 자바 8의 변화 중 Date와 Time이 새롭게 추가되었습니다. 기존에 어떤 방식을 사용하였고, 어떻게 개선되었는지 확인해보겠습니다. 기존의 Date API와 새로운 API 기존의 Date API는 java.util에 속해 있습니다. java.util.Date - 날짜와 시간, 기본 시간대를 사용하여 출력 java.util.Calendar - 날짜와 시간, 날짜를 조작하는데 더 많은 메소드 제공 java.text.SimpleDateFormat - 날짜와 달력을위한 형식 (날짜 -> 텍스트), 변환 (텍스트 -> 날짜) 자바 8에서는 JSR310(Joda-time을 참고)이 새로 만들어졌으며 java.time 패키지에 담겨 있습니다. java.time.LocalDate - 날짜(시간 포함하지 않음),.. 2022. 10. 28.
JVM의 구조 개요 자바는 JVM에서 작동하는 프로그램으로, JVM의 내부 구조를 알아보겠습니다. JVM 설계도 JVM은 크게 클래스 로더 시스템(Class Loader SubSystem), 런타임 데이터 공간(Runtime Data Areas), 실행 엔진(Execution Engines) 3가지로 분류 할 수 있습니다. 클래스 파일을 읽는 것부터, 분석과 실행의 과정을 확인해보겠습니다. 아래 사진은 JVM의 설계도입니다. 1. 클래스 로더 시스템(Class Loader SubSystem) 클래스 로더 시스템은 자바 클래스를 JVM의 Runtime Data Area에 동적으로 로드합니다. 컴파일 시점이 아닌 런타임 시점에 참조하고 있는 클래스를 로딩, 링킹, 초기화를 통해 로드합니다. 클래스 로더 덕분에 런타임에 파.. 2022. 10. 21.
Java 8에서 개선된 가비지 컬렉터는? 개요 Java 8은 2014년 3월에 출시되었으며, Java 7과 다른 가비지 컬렉터 구조를 가집니다. 대표적으로 Java 7의 PermGen이 Java 8에서 Metaspace로 대체되었습니다. 어떤 차이가 있는지 알아보겠습니다. PermGen PermGen(Permanent Generation)은 클래스와 메서드 메타 데이터, static 내용들이 저장되는 힙에서 분리된 별도의 힙 공간입니다. 또한 바이트코드, 이름, JIT 정보를 저장합니다. 기본 최대 메모리 크기는 32bit에서 64MB, 64bit에서 82MB입니다. JVM의 메모리 크기를 다음 명령어로 설정할 수 있습니다. -XX:PermSize=[size] is the initial or minimum size of the PermGen s.. 2022. 10. 19.
가비지 컬렉터(Garbage Collector) - 2 개요 앞서 가비지 컬렉터의 과정 및 사용 방법을 알아보았습니다. 이번 시간에는 Old 영역에서 가비지 컬렉터 알고리즘을 알아보겠습니다. 버전은 Java 7 기준입니다. 목차 Serial Collector Parallel Collector Parallel Old Collector CMS Collector G1 Garbage Collector 1. Serial Collector(-XX:+UseSerialGC) Serial collector는 단 하나만의 쓰레드를 사용하며 다른 쓰레드들과 통신할 일이 없기 때문에 효율적인 방법입니다. 하나의 단일 프로세서에 사용하기에 적합하며 대신에 멀티 프로세서의 이점은 이용할 수 없습니다. (약 100MB의 작은 데이터 부분의 어플리케이션의 멀티 프로세서에서는 가능합니다... 2022. 10. 18.
가비지 컬렉터(Garbage Collector) - 1 개요 C, C++ 등의 언어는 메모리 관리를 위해 프로그래머가 객체의 생성뿐 아니라 삭제도 해야 합니다. 하지만, 가끔 삭제를 제대로 하지 않으면 새로운 객체가 생성될 메모리가 적어지고 OutOfMemoryErrors 오류가 납니다. 자바에서는 자동적으로 객체의 메모리 점유를 초기화(free)해주는 Garbage Collector가 존재합니다. 개발자가 직접 할당된 객체의 메모리를 제거하지 않기 때문에 좀 더 코드 구현에 집중할 수 있습니다. 삭제 알고리즘은 다양하며, 객체에 다양한 reference 수준을 설정하여 좀 더 최적화된 GC를 사용할 수 있습니다. 이번 글에서 GC가 어떻게 동작하여 객체를 삭제하는지 알아보겠습니다. 목차 가비지 컬렉터란? Reference Counting Algorithm .. 2022. 10. 18.
반응형