본문 바로가기
반응형

Java37

자바의 변성 - 공변/무공변/반공변, 사용지점 변성과 선언 지점 변성 목차 · 변성 · 제네릭과 공변/무공변 · 와일드카드 타입과 공변/반공변 · 사용지점 변성과 선언 지점 변성 변성 변성(Variance)은 타입의 계층 관계에서 서로 다른 타입 간에 어떤 관계가 있는지 나타내는 개념이다. 해당 개념은 자바의 제네릭을 설명하기 위해 자주 사용된다. 변성에는 네 가지 종류가 있다. 공변(covariant), 반공변(contravariant), 이변량(bivariant), 무공변(or 불공변, invariant) 이 중에서 알아볼 것은 공변, 반공변, 무공변이다. 제네릭과 공변/무공변 공변은 사전적 의미로 '함께 변하는'이라는 뜻이다. 제네릭은 기본적으로 무공변(or 불공변, invariant)이다. 즉, 서로 다른 타입 Type1과 Type2가 있을 때, List은 List.. 2022. 2. 8.
[Java] 자바8의 새로운 날짜 관련 클래스들 - java.time 패키지 (LocalDate, LocalTime, LocalDateTime, ZonedDateTime) 자바 java.time 패키지 사용하기 학습 목표 · 날짜와 시간 객체 · 날짜와 시간에 대한 정보 얻기 · 날짜와 시간 조작하기 - 날짜와 시간 빼기와 더하기 - 날짜와 시간 변경하기 - 날짜와 시간 비교하기 -날짜 포맷 정하기 · 자바 7 이전까지는 Date, Calendar, SimpleDateFormatter 클래스를 이용해서 날짜와 시간 정보를 처리했지만, 여러 단점이 존재했다. TODO: 단점 정리 하지만 Date 클래스는 단순히 특정 시점의 날짜 정보를 저장하는 역할만을 하며, 대부분의 메소드가 Deprecated되었다. 또한 Calendar도 날짜 와 시간 정보를 얻는 것 외에 날짜와 시간은 조작하거나 비교하는 기능이 부족했다. 이러한 기존 버전의 문제점을 해결하기 위해서 자바 8부터 날짜.. 2021. 12. 13.
[Java] JDK가 제공하는 기본 개발 도구 (javac, java, javadoc, jps, jmap) JDK를 설치하고, bin 디렉토리를 확인해보자. 다음과 같이 JDK가 제공하는 기본 개발 도구들을 볼 수 있다. 이 도구 들의 기능을 직접 사용해보고, 어떠한 기능을 하는지 알아보자. * 다음 예시들은 JDK 11 버전을 기준으로 작성했습니다. javac · 자바 코드로 작성된 파일(.java)을 JVM이 실행 가능한 파일(.class)로 컴파일하는 명령어 - .class 파일은 자바 바이트코드로 구성된 파일이다. · 사용법: javac [파일명.java] 사용 예시 명령어를 사용하기전, 명령어를 적용할 HelloWorld.java 파일을 생성하고, 아래와 같이 작성한다. HelloWord.java public class HelloWorld { public static void main(String[].. 2021. 12. 6.
[Java] if-else vs switch, 조건문의 속도 차이와 그 이유 다음과 같이 같은 기능을 하는 switch문과 if문을 작성해보자. public class SwitchAndIf { public static void switchTest(int num) { switch (num) { case 1: System.out.println("숫자 1입니다."); break; case 2: System.out.println("숫자 2입니다."); break; case 3: System.out.println("숫자 3입니다."); break; case 4: System.out.println("숫자 4입니다."); break; case 5: System.out.println("숫자 5입니다."); break; default: System.out.println("알 수 없는 숫자입니다... 2021. 12. 5.
[Algorithm] 구현 문제란? 학습 목표 · 구현 문제란? · 구현 시 고려해야 할 메모리 제약 사항 · 채점 환경 · 구현 문제에 접근하는 방법 구현 문제란? 코딩 테스트에서 구현 · 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 구현 문제 · 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제 - 코딩 테스트에서는 구현이 중심이 되는 문제가 자주 출제된다. - ex) 완전 탐색, 시뮬레이션 유형 ▶ 완전 탐색: 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 ▶ 시뮬레이션: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 문제 구현하기 어려운 문제란? 1. 알고리즘은 간단한데 코드가 치나칠 만큼 길어지는 문제 2. 특정 소수점 자리까지 출력해야 하는 문제 3. 문자열이 입력으로 주어졌을 때 한 문자 .. 2021. 11. 6.
[Junit] AssertJ란? 학습 목표 · AsserJ란? · AsserJ의 장점 · TODO: AssertJ의 단점 · 라이브러리 의존성 설정 · AssertJ 메소드 임포트 · 사용 방법 · 잘못된 사용 예시 AsserJ란? · 단언문(assertion)을 작성하기 위한 풍부한 인터페이스를 제공하는 자바 라이브러리로, 테스트 코드의 가독성을 향상시키고 테스트 유지 관리를 더 쉽게 만드는 것을 주요 목적으로 한다. · JUnit의 단언에 대한 표현력 부족을 보완한다. · spring-boot-starter-test에 기본적으로 포함된다. AssertJ의 장점 · 메서드 체이닝을 지원하여 깔끔하고 읽기 쉬운 테스트 코드를 작성 가능하다. · 타입별로 다양한 검증 메서드를 제공한다. - 개발자가 테스트를 하면서 필요하다고 상상할 수 .. 2021. 10. 30.
반응형