Programming
-
[Java] LinkedList 구현하고 JUnit5로 테스트하기Programming/Java 2021. 4. 5. 12:58
Java로 LinkedList를 구현해보자! Requirements LinkedList에 대해 공부하세요. 정수를 저장하는 ListNode 클래스를 구현하세요. ListNode add(ListNode head, ListNode nodeToAdd, int position)를 구현하세요. ListNode remove(ListNode head, int positionToRemove)를 구현하세요. boolean contains(ListNode head, ListNode nodeTocheck)를 구현하세요. 목차 1. 리스트 자료구조 1.1. 배열로 만든 리스트 1.2. 연결리스트 2. 연결리스트 2.1. 노드 2.2. 연결리스트의 종류 2.3. 자바의 연결리스트 클래스 3. 코드 3.1. 연결리스트 구현코드 ..
-
[Java] 선택문과 제어문Programming/Java 2021. 4. 5. 12:57
Java언어에서 flow control을 담당하는 선택문과 제어문을 공부해보자! 과제 회고 자바의 기본적인 문법은 알고 있었지만, 속성식으로 빠르게 배웠기 때문에 깊이가 없다고 생각했다. 그래서 이번 과제의 목표를 다음과 같이 잡았다. oracle documentation과 예제보고 키워드 사용법 제대로 이해하기 새롭게 업데이트 된 부분 공부하기 문서와 예제를 통해 공부를 하니까, 이미 알고있던 키워드도 더 잘 활용하는 방법을 배울 수 있었다. 또 새롭게 알게 된 내용도 많았다. forEach 메서드 새로운 Switch문 사용법 ->와 yield문 사용 배운 내용을 잘 활용하면, 좀 더 가독성 있는 코드를 짤 수 있을 거 같다. 프로그램의 흐름을 제어하는 선택문과 제어문 Java언어에서 프로그램의 흐름을..
-
[Java] GitHub API를 사용해서 대시보드 만들기Programming/Java 2021. 4. 5. 12:57
GitHub API를 사용해서 대시보드 만들기 Requirements 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것. 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것. Github 자바 라이브러리를 사용하면 편리합니다. 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다. 1. GitHub 자바 라이브러리 우선 GitHub 자바 라이브러리를 알아보았다. 우선 GitHub API란, GitHub가 제공하는 다양한 정보와 기능을 개발자의 응용 프로그램에서 사용할 수 있도록 제공하는 GitHub의 인터페이스이다. 해당 라이브러리는 이러한 GitHub A..
-
[Java] 자바파일 컴파일(javac)과 실행(java)Programming/Java 2021. 4. 5. 12:56
IDE를 사용하지 않고 자바파일(.java)을 컴파일하고 실행해보자. 자바파일을 실행하기 위해서는 컴파일과 실행과정을 거쳐야 한다. 이를 위해 자바 컴파일러와 자바 응용 프로그램 로더가 필요하다. javac.exe : JDK에 포함. 자바 컴파일러 java.exe : JRE에 포함. 자바 응용 프로그램 로더. javac 컴파일러가 만든 클래스 파일을 해석 및 실행 cf. 자바 11부터 JDK에 JRE를 포함한 형태로 배포된다. 1. 컴파일 package javabasic.week1; public class CompileDemo { static class SubClass{ void print(){ System.out.println("from SubClass."); } } public static void ..
-
[Java] JVM의 구조Programming/Java 2021. 4. 5. 12:55
JVM의 구조를 살펴보자. JVM은 크게 Class Loader SubSystem(클래스로더 서브시스템), Runtime Data Areas, Execution Engine(실행엔진)으로 구성되어 있다. JVM 아키텍처 source : dzone.com 1. 클래스로더 서브 시스템 프로그램을 실행하는 데 필요한 클래스를 읽어오는 역할을 한다. 클래스 로딩 절차는 다음과 같이 요약할 수 있다 메서드 호출 문장을 만난다. 해당 메서드를 가진 클래스 바이트 코드가 로딩 전이다. 클래스 로더가 jre 라이브러리 디렉토리에서 해당 클래스의 유무를 조사한다. 발견하지 못했다면, jdk 확장 디렉토리에서 해당 클래스의 유무를 조사한다. 발견하지 못했다면, classpath 환경변수에 지정된 디렉토리(직접 선언한 클래..
-
[Java] JDK(개발도구), JRE(실행환경), JVM(가상머신)Programming/Java 2021. 4. 5. 12:54
자바언어의 특징인 WORA와 자바로 작성된 프로그램을 뒷바침하는 도구들(JDK,JRE,JVM)을 살펴보자. 1. 자바의 WORA(Write Once Run Anywhere) C언어의 특징을 먼저 살펴보자. C언어로 작성된 프로그램은 플랫폼에 종속적이다. 예를 들어, Intel CPU + Windows OS 환경에서 작성한 C 프로그램은 해당 환경에서만 실행이 가능하다. 즉, Intel CPU + MAC OS 또는 AMD CPU + Windows OS등의 환경에서는 실행되지 않는다는 것이다. C로 작성된 프로그램이 호환성이 없는 이유는 다음과 같다. CPU(Central Processing Unit, 중앙처리장치)마다 기계어가 다름 기계어는 Java나 Python처럼 통일된 문법을 가진 언어가 아니다. C..
-
[Java] 기계어(바이너리코드)와 바이트코드Programming/Java 2021. 4. 5. 12:53
기계어(바이너리코드)와 바이트코드를 알아보자 컴퓨터(CPU)는 일종의 계산기이다. 0과 1로 이루어진 바이너리 코드(binary code)를 해석하여 프로그램을 실행한다. 사람이 이해할 수 있는 high-level language x = 10 + 2 y = x + 4 기계가 이해할 수 있는 low-level language (binary/machine code) 001001 11101 11101 1111111111111000 001000 00001 00000 0000000000001010 001000 00001 00001 0000000000000010 101011 11101 00001 0000000000000000 001000 00010 00001 0000000000000100 101011 11101 0..
-
[Java] JVM과 GC 메모리 관리Programming/Java 2021. 4. 5. 12:52
JVM(Java Virtual Machine, 자바가상머신) OS의 메모리 영역에 접근하여 메모리를 관리하는 프로그램으로, 메모리관리와 Garbage Collecting 기능을 수행한다. GC(Garbage Collector, 가비지 컬렉터) 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능을 수행한다. JVM의 메모리관리 참고자료 C나 C++에서는 OS레벨의 메모리에 직접 접근하기 때문에, free() 메소드를 호출하여 할당받은 메모리를 해제해주어야 한다. 그렇지 않으면 메모리 누수가 발생하여 프로그램의 응답속도가 늦어지다 결국 OOM(OutOfMemory) 오류로 프로그램이 종료되고, 다른 프로그램에 영향을 끼칠 수도 있다. 반면, 자바는 OS의 메모리 영역에 직접 접근하지..