본문 바로가기

CS/Java

(7)
Garbage Collection : 개념, 작동 과정, Java 발전 과정 Garbage Collection(GC)프로그램이 동적으로 할당했던 메모리 영역 중 필요없는 부분을 자동으로 해제하는 기능 목적메모리 누수 방지개발자 실수를 줄이고 부담 감소(직접 메모리 관리 X)메모리 해제를 잊는 경우해제한 메모리를 다시 해제하는 경우이미 해제된 메모리에 접근하는 경우단점메모리 해제 타이밍을 알기 어려워 메모리 제어가 어려움GC 동작 중에는 다른 동작을 모두 멈추기에(Stop-The-World) 성능 저하 발생개발자의 실수로 메모리 누수 발생 가능사용하지 않는 객체이지만 여전히 접근 가능할 경우* Stop-The-World : GC 작업 중 애플리케이션의 모든 스레드를 중단, 오버 헤드 발생의 원인이므로 이 시간을 최소화하는 것이 핵심 GC 제공 언어 : Java, Python, Ja..
Java의 컴파일 방식과 JVM 구조 Java Compile Java는 "Write Once, Run Anywhere"라는 철학을 바탕으로 설계되어 OS 독립적으로 실행될 수 있습니다 1. 왜 다른 언어들은 OS마다 다르게 실행되나요? 고급 언어 : C, Java, Python, ....저급 언어 : 기계어 저급 언어로 프로그램을 짜는 것은 인간에게 너무 어렵고 컴퓨터는 고급 언어를 이해하지 못합니다따라서, 인간은 고급 언어로 프로그램을 짜고 컴퓨터가 이해할 수 있는 저급 언어로 바꿔주는 컴파일러가 필요합니다 OS : Windows, Mac OS, Linux, Android, iOS, .... CPU는 고유한 명령어 집합(ISA)을 가지고 있고 OS는 ISA에 맞는 기계어 명령을 생성하여 CPU와 상호작용합니다따라서, CPU 및 OS의 IS..
String, StringBuffer, StringBuilder의 차이와 사용법 String class MyString { private final char[] value; public MyString(char[] input) { this.value = new char[input.length]; System.arraycopy(input, 0, this.value, 0, input.length); } public MyString concat(MyString str) { char[] newValue = new char[value.length + str.length()]; System.arraycopy(value, 0, newValue, 0, value.length); System.arraycopy(str..
JAVA SOLID 원칙 가이드: 코드 예제로 보는 5가지 원칙 SOLID 원칙 유지보수와 확장에 용이한 객체지향적인 프로그래밍을 확인하기 위한 5가지 원칙 SRP(Single Responsibility Principle) : 단일 책임 원칙한 클래스는 하나의 책임만 가져야 한다.한 클래스가 두 가지 이상의 책임을 진다면 클래스 분리를 고려해야 한다.OCP(Open/Closed Principle) : 개방-폐쇄 원칙소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.기능이 확장되는 것은 허용하나, 스스로 변경이 되어서는 안된다.LSP(Liskov Substitution Principle) : 리스코프 치환 원칙프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.부모 클래스 자리에 자식 클래스를 넣어도 예상..
자바의 날짜와 시간 클래스 기존의 날짜 클래스 Java 1.0에는 Date 클래스, Java 1.1에는 Calender 클래스로 날짜와 시간 관련 기능을 제공했습니다.하지만 두 클래스에는 다음과 같은 문제가 존재합니다Date1900년을 기준으로 하는 오프셋0부터 시작하는 달문자열 활용의 어려움기본 시간대가 중앙 유럽 시간대(CET)스레드 안전하지 않은 DateFormat유지보수가 어려운 가변 클래스Calender0부터 시작하는 달DateFormat 사용 불가유지보수가 어려운 가변 클래스따라서 새로운 날짜와 시간 클래스의 요구가 증가하였고 자바 8에서 java.time 패키지를 추가하게 됩니다. LocalDateTime, LocalDate, LocalTime 이름에서 알 수 있듯이 LocalDateTime은 날짜와 시간, Local..
Java_02 - 변수(Variable)_01 이번에는 변수에 대해서 알아봅시다 수학과 달리 프로그래밍 언어에서 변수는 데이터를 저장하는 메모리 공간을 의미합니다 * 변수 : 데이터를 저장하는 메모리 공간 변수는 왜 사용하나요? public class Main { public static void main(String[] args) { System.out.println(30 * 10 / 2); } } 위 코드에서 30 * 10 / 2가 의미하는 바를 알 수 있나요? 삼각형의 높이를 구하는 건가?라고 생각할 수도 있겠네요 하지만 저는 30분의 강의 10개를 2일간 들으려면 하루에 몇 분을 학습해야 하는가를 알고 싶었습니다 이 문제를 해결하기 위해 의미가 모호한 표현에 이름을 붙여줄 수 있다면 좋겠네요 public class Main { public s..
Java_01 - Hello World 프로그래밍 언어를 배울 때 가장 많이 하는 Hello World 출력을 자바로 해봅시다. public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } Hello World! 자바에 입문하신 것을 축하드립니다!!! 그런데 어떻게 Hello world!가 출력이 되는지 궁금하지 않으신가요? 자바가 실행되는 과정과 코드에 대해서 살펴봅시다 처음 보는 용어가 많아 어렵게 느낄 수 있습니다 차차 자세한 내용은 알게 될 것이니 지금은 이해가 안되어도 괜찮으니 가볍게 읽고 넘어갑시다 자바 코드는 어떻게 실행이 되나요? .java → (컴파일) → .class → (실행) → "Hello world!..