분류 전체보기 30

[JAVA] 15. JIT(Just In time)

JIT (Just-In-Time) 컴퓨터 프로그래밍을 실행하는 두 가지 방식인 인터프리트 방식과 정적 컴파일 방식을 혼합한 것. 인터프리트 방식 : 프로그램을 실행할 때마다 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 수행함. 간편하지만 성능이 매우 느림 정적 컴파일 방식 : 실행하기 전에 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 미리 실행함. 변환 작업은 딱 한 번만 수행하므로 속도가 빠름. 따라서, JIT의 변환 작업은 인터프리터에 의해서 지속적으로 수행되지만, 필요한 코드의 정보는 캐시에 담아두었다가(메모리에 올려두었다가) 재사용하게 된다. "분명히 나는 javac 명령어를 통해 컴파일을 했는데, 그럼 그냥 정적 컴파일 방식이 아닌가?" : javac라는 명령어를 통해 컴파일을 하..

Java 2021.05.18

[JAVA] 중간 점검

1. 참조 자료형(Reference type)과 기본 자료형(Primitive type)의 차이를 정리해 주세요. 참조 자료형은 내가 마음대로 만들 수 있지만, 기본 자료형은 정해져 있다. 기본 자료형 : byte, short, int, long, char, float, double, boolean 참조 자료형 : 기본 자료형을 제외한 나머지 타입 모두를 말함. Calculator, Car 클래스 등등 byte형을 왜 만들었을까? (-128 객체 생성 } } 번외) 생성자가 없더라도 객체를 얻을 수 있는 클래스가 존재한다. 4. Overloading은 무엇인가요? public void setData(int a)라는 메소드를 원하시는 대로 Overloading 해주세요. 메소드를 생성자처럼 이름만 같고 매..

Java 2021.05.17

[JAVA] 14. Function Interface

Function Interface란? 함수를 일급 객체로 사용할 수 없는 자바 언어의 단점을 보완하기 위해 도입되었습니다. 위 덕분에 자바는 전보다 간결한 표현이 가능해졌으며, 가독성이 높아지게 되었습니다. 일반적으로, 구현해야 할 추상 메서드가 하나만 정의된 인터페이스를 가리킴. "Java Language Specification의 설명" A functional interface is an interface that has just one abstract method (aside from the methods of Object), and thus represents a single function contract. Functional Interface는 (Object 클래스의 메소드를 제외하고) 단 하..

Java 2021.05.11

[JAVA] 13. 쓰레드(Thread)

쓰레드는 언제 수행 되는가? java 명령어를 사용하여 클래스를 실행시키는 순간 자바 프로세스가 시작되고, main() 메소드가 수행되면서 하나의 쓰레드가 시작된다. ※아무런 쓰레드를 생성하지 않아도, JVM을 관리하기 위한 여러 쓰레드가 존재한다. 예를 들면 자바의 쓰레기 객체를 청소하는 GC 관련 쓰레드처럼 말이다. 쓰레드는 왜 만들었을까? 프로세스가 하나 시작하려면 많은 자원이 필요함. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당해야 함. JVM은 기본적으로 적어도 32MB~64MB의 물리 메모리를 점유함. 그에 반해, 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유함. (쓰레드 == 경량프로세스) 쓰레드는 어떻게 생성하는가? 크게 두 가..

Java 2021.05.04

[Algorithm] 1. LinkedList

Linked List는 데이터를 노드의 형태로 저장. 노드에는 데이터와 다음 노드를 가르키는 포인터를 담은 구조로 이루어져 있음. Node Data Next Python 내장 함수의 시간 복잡도에서 List의 삽입과 삭제의 시간복잡도가 O(n)이 걸리는 것은 배열이 물리적인 데이터의 저장 위치가 연속적이어야 하므로 데이터를 옮기는 연산작업이 필요하기 때문이다. 하지만 Linked List는 데이터를 삽입, 삭제할 경우, 노드의 Next부분에 저장한 다음 노드의 포인터만 변경해주면 되므로 배열과 비교하였을 때 linked list가 효율적으로 데이터를 삽입, 삭제할 수 있다. 그러나, 안타깝게도 Linked List에서 특정 위치의 데이터를 탐색하기 위해서는 첫 노드부터 탐색을 시작해야 한다. 그 시간이 ..

Algorithm 2021.05.03

[JAVA] 12. 자바 컬렉션(Map편)

Map의 개념은 다른 컬렉션보다 간단하다. Map에 데이터를 넣는 put() 데이터를 확인하는 get() 데이터를 삭제하는 remove() Map 인터페이스를 구현한 클래스들 HashMap, TreeMap, LinkedHashMap, Hashtable 기능 HashMap HashTable 키나 값에 null 저장 가능 여부 가능 불가능 여러 쓰레드 안전 여부 불가능 가능 따라서, Hashtable을 제외한 Map으로 끝나는 클래스들을 여러 쓰레드에서 동시에 접근할 땐 Map m = Collections.synchronizedMap(new HashMap(...)); 와 같이 선언해서 사용해야 한다. HashMap 클래스의 상속 관계 java.lang.Object ㄴ java.util.AbstractMap ..

Java 2021.04.30

[JAVA] 11. 자바 컬렉션(Set과 Queue편)

Set은 순서에 상관 없이, 어떤 데이터가 존재하는지를 확인하기 위해 사용됨. 예를 들어, 어떤 서버에 1분간 사용자가 요청한 로그가 있음. 이 서버에 붙어서 요청한 IP를 기준으로 사용자의 수가 얼마나 되는지 확인한다고 가정. 중복된 사용자는 모두 1로 봐야 하므로 set으로 추출이 필요함. Set 인터페이스를 구현한 주요 클래스 HashSet, TreeSet, LinkedHashSet HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장. Set 중에 가장 성능이 좋다 TreeSet : 저장된 데이터의 값에 따라 정렬됨. HashSet 보다 성능이 약간 느림. LinkedHashSet : 저장된 순서에 따라 값이 정렬. 성능 가장 나쁨. HashSet 클래스의 상속 관계 java.la..

Java 2021.04.30

[JAVA] 10. 자바 컬렉션(List편)

자바에서 컬렉션은 목록성 데이터를 처리하는 자료 구조를 통칭한다. 자바에서의 데이터를 담는 자료 구조는 다음과 같다. 순서가 있는 목록(List)형 순서가 중요하지 않은 셋(Set)형 먼저 들어온 것이 먼저 나가는 큐(Queue)형 키-값(Key-value)으로 저장되는 맵(Map)형 목록, 셋, 큐는 Collection이라는 인터페이스를 구현한다. public interface Collection extends Iterable Collection 인터페이스는 제네릭 타입(요소)로 선언되어 있고, Iterable인터페이스를 확장한다. List 인터페이스는 배열처럼 "순서"가 있고, 이를 구현한 클래스들은 ArrayList, Vector, Stack, LinkedList가 있다. ArrayList의 객체는..

Java 2021.04.30

[JAVA] 9. 특별한 java.lang 패키지

java.lang 패키지는 아주 특별하다. 자바의 패키지 중에서 유일하게 import를 안해도 사용할 수 있기 때문. 그만큼 자바에서 꼭 필요한 여러 기능들을 제공함. 여기서는 자바 개발자가 꼭 알고 있어야 할 항목들만 소개한다. 문자열 관련 - CharSequence 인터페이스 - String, StringBuffer, StringBuilder 클래스 기본 자료형 및 숫자 관련 - Boolean, Byte, Character, Double, Float, Integer, Long, Math, Number, Short 클래스 쓰레드 관련 - Runnable 인터페이스 - Thread, ThreadGroup, ThreaLocal 클래스 예외 관련 - Throwable 클래스 - Exception 예외 및 에..

Java 2021.04.30

[JAVA] 8. JVM의 개념과 역할

JVM이란? Java Virtual Machine. (가상 머신 : 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것) - 우리가 작성한 자바 프로그램이 수행되는 프로세스를 의미함. - 다시 말해, java라는 명령어를 통해 애플리케이션이 수행되면, 이 JVM 위에서 애플리케이션이 동작함. JVM은 JAVA와 OS사이에서 중개자 역할을 수행. 그리고 가장 중요한 메모리관리, Garbage Collection을 수행. 왜 자바 가상머신을 알아야 하는가? 사용자가 많아지는 애플리케이션일수록, 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해 노력해야 한다. 따라서, 메모리 효율성을 위해 메모리 구조를 알아야 하는 것은 필수이다. 자바 프로그램 실행 과정 1. 프로그램이 ..

Java 2021.04.30