자바 16

[프로그래머스] N개의 최소공배수 - 2단계

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 해설 : 이 문제는 최대공약수와 최소공배수 구하는 방법을 모두 알고 있어야 풀이가 가능한 문제이다. 과거 2개의 수만 주어지는 최소공배수와 최대공약수 구하는 문제가 떠올랐긴 했지만, 여러 요소가 존재하는 배열이 주어지니깐 어떻게 풀어야 할지 감이 잘 오지 않았다. 결국엔, 앞 요소와 바로 뒷 요소를 선택하..

Algorithm 2021.07.08

[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

[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] 8. JVM의 개념과 역할

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

Java 2021.04.30

[JAVA] 7. 자주 쓰는 어노테이션(@) 종류

@Override What : 해당 메소드가 부모 클래스에 있는 메소드를 Override 했다는 것을 명시적으로 선언. Why : 만약 매개 변수가 하나 빠진 상태로 Override했을 경우, 명확하게 "이 메소드는 Override 된거니깐 내가 잘못 코딩했으면 컴파일러 너가 알려줘." 라고 지정해주는 것. @Deprecated What : 미리 만들어져 있는 클래스나 메소드가 더 이상 사용되지 않는 경우 선언. Why : "얘는 더 이상 사용하지 않으니까 그렇게 알아두고, 누가 이거 쓰면 경고 한번 해줘." 라고 지정해주는 것. @SupressWarnings What : 코딩하다 간혹 컴파일러에서 경고를 줄 때 제외시키기 위해 선언. Why : "얘는 일부러 이렇게 코딩한 거니까 너가 경고를 해 줄 필..

Java 2021.04.29