ordinal 메서드 대신 인스턴스 필드를 사용하라 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응한다. 그리고 ordinal은 몇 번째 위치인지 반환해주는 메서드이다. 하지만 이 메서드는 치명적인 단점이 존재한다. public enum BadOrdinal { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusician() { return ordinal() + 1; } } 동작은 하지만 유지보수에 정말 좋지 않은 코드이다. 상수 선언 순서를 바꾸는 순간 오동작하며 복합 4중주도 똑같은 8명이지만 이미 8중주 상수가 존재하기 때문에 추가할 수 없다. 해결책은 열거 타입 상수에..
간략하게 영한님 MVC 2편에 대해 학습한 내용을 적을 예정이다. 오늘은 중요 포인트 중 리터럴 값 사용과 연산 속성 반복 조건부 주석에 대해 학습해보았다. 차근차근 하나 씩 살펴보자. 1. 리터럴 리터럴은 자바에서도 배웠을 것이다. 코드상에 고정된 값으로 상수랑은 좀 다른 의미로 존재한다. 20, 2, "Hello" 등이 리터럴이라고 할 수 있다. 사실 이러한 내용이 중요한 것은 아니다. 핵심은 리터럴은 항상 ''로 감싸야 하는데 이 때 타임리프는 번거로움을 덜어주고자 다음과 같은 상황엔 생략이 가능하다. 가능한 상황 : A-Z, a-z, 0-9, [], . , - , _ 이러한 경우에는 정상적으로 타임리프가 동작하지만 위와 같은 코드는 중간에 Blank가 존재하기 때문에 동작하지 않고 오류가난다. 만..
대부분 제네릭에 대해 잘 알고 있다고 시작하는 포스팅이니 잘 모른다면 기본을 공부해보고 오는 것을 추천한다. https://blog.naver.com/ilgolc/222552815030 Java_Week14 Generics 란? 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크... blog.naver.com 제네릭 기초에 관한 내용들이 포스팅 되어 있으니 한 번 보고 이 글을 읽기를 바란다. 제네릭은 자바 5 부터 나온 문법으로 기본적으로 컬렉션에서 많이 볼 수 있었을 것이다. 제네릭은 다음 처럼 사용할 수 있다. List list = new ArrayList(); // 뒤에 선언 부에는 생략이 가능 그럼 바로 시작해보자. 로 타입 보다 Generic 제네릭을 사용..
Spring boot를 처음 설정해놓으면 Application 클래스에 @SpringBootApplication이라는 어노테이션을 볼 수 있다. 그리고 그 안에는 여러가지 주석이 존재한다. @SpringBootConfiguration과 @EnableAutoConfiguration 그리고 @ComponentScan이 존재한다. @EnableAutoConfiguration 이 주석은 AutoConfiguration을 쓰겠다는 것을 의미한다. AutoConfiguration은 해석하면 자동 설정이라는 뜻으로 다음과 같은 Spring.factory에 저장되어 있는 정보들을 가지고 자동으로 스프링 빈으로 등록해준다. 그렇기 때문에 우린 별다른 설정 없이 스프링을 자유롭게 사용할 수 있다. 생각을 해보면 Sprin..
Abstract 클래스는 엄연히 클래스이기 때문에 1개밖에 상속을 받을 수 없으나 interface는 다중 구현이 가능하다는 대표적인 차이가 있습니다. 다만 제 경험을 살려 잘못된 추가적인 오해가 있을 법한 사항이 있어 글을 적었습니다. Interface는 abstract 클래스와 달리 내부 구현이 안되지 않아? 이런 생각을 할 분이 분명 있다고 생각한다. Interface 내부에 기능 구현은 흔치 않은 상황이기 때문이다. 정답을 먼저 말씀드린다면 그렇지 않다. Why? Interface는 JDK 8 버전 이후 부터 static 메서드 외에도 default 메서드를 지원합니다. 이는 기존에 사용되는 interface에 문제점인 한 번 배포되면 수정이 어렵다는 점을 해결하고 있습니다. 핵심은 이것이 아니기..
저번에는 성능 향상과 Stream에 동작 순서에 대해 알아보았다면 이제는 Optional에 대해 알아보자 Stream은 지연 처리를 통해 연산을 하여 값을 도출해낸다. 그렇다면 정확한 이유와 흐름에 대해 파악해보자 Stream 지연 처리 예제 코드를 먼저 살펴보자 public class StreamLazyCal { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7}; int sum = Arrays.stream(arr) .filter(n -> n % 2 == 1) .sum(); System.out.println(sum); } } 이 예제 코드는 배열을 filter를 통해 홀수만 걸러내어 그 합을 출력하는 코드이다. Strea..
자 우리는 Stream 메서들을 알아 보았고 데이터를 생성해 가공하고 결과를 만들었다. 그렇다면 이러한 Stream을 왜쓰고 동작 흐름에 대해 좀 더 깊게 들어갈 필요가 있다. 2부는 이 내용에 초점을 둘 것이다. 그 전에 사전 지식에 대해 알 필요가 있다. 동시성(Concurrency) 멀티 작업을 위해 스레드가 번갈아가며 실행하는 성질, 싱글 코어 CPU를 이용한 멀티 작업은 병렬적으로 실행되는 것이 아닌 동시성 작업이다. 병렬성(Parallelism) 멀티 작업을 위해 멀티 코어를 이용해 동시에 실행하는 성질 데이터 병렬성(Data Parallelism) 전체 데이터를 나누어 서브 데이터를 만들고 서브 데이터를 병렬 처리해 작업을 빠르게 종료하는 것 q병렬 스트림은 데이터 병렬성을 구현 멀티 코어의..
오늘의 주제는 Stream이다. 실무에서 많이 사용하고있는 문법인 Stream은 가독성을 높여주고 지연 연산을 통해 성능을 최적화 할 수 있다. 우리는 그럼 이러한 많은 장점을 보유한 Stream을 다음 순서로 알아볼 것이다. Stream에 존재하는 다양한 메서드 생성하기 가공하기 결과 만들기 동작 순서 성능 향상 지연 처리 Null-safe Stream 생성 줄여 쓰기 자 그럼 시작해보자! Stream에 존재하는 다양한 메서드 우린 차근 차근 Stream을 생성하고 가공하고 결과를 만드는 것을 차례대로 해볼 것이다. 그저 문법이기 때문에 그렇게 어렵지 않을 것이다. 그렇다면 같이 Stream을 생성하여 결과를 만들어보자 !! 1. 생성하기 먼저 배열을 통해 Stream을 생성해보자 ! public cl..
1. MySQL 엔지 아키텍처 MySQL 전체구조 MySQL은 일반 상용 RDBMS와 같이 대부분의 프로그래밍 언어로부터 접근 방법을 모두 지원한다. MySQL 고유의 C API부터 시작해 JDBC나 ODBC 등응 모든 언어로 MySQL 서버에서 쿼리를 사용할 수 있게 지원한다. MySQL서버는 크게 엔진과 스토리지 엔진으로 구분할 수 있다. 그러면 한 번 살펴보자. MySQL 엔진 MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 sQL 파서 및 전처리기, 퀴리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 또한 MySQL은 표준 SQL(ANSI SQL) 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행될 수 있다. 스토리지 엔진 ..
finally 블록 finally 블록은 보통 예외의 발생 여부와 상관없이 꼭 실행되어야 할 코드를 이 블록에 넣어 마지막에 출력하도록 처리한다. try { // 예외 처리가 발생할 가능성이 있는 로직 작성 } catch (Exception e) { // 예외 발생시 실행되는 로직 보통 에러 메시지를 출력 } finally { // 예외 발생 여부와는 상관없이 수행되는 로직 // finally 블럭은 try-catch문 마지막에 위치해야 함 } 예외 발생 시 try -> catch -> finally 순, 예외가 발생하지 않았을 땐 try -> finally 순으로 실행된다. 예제를 살펴보자 package exception; public class FinallyEx1 { public static void..
- Total
- Today
- Yesterday
- Redis
- DB
- 코딩
- Kotlin
- java
- 백엔드
- 취준
- 게시판
- Spring
- CS
- 개발자
- 동시성
- docker
- 면접 준비
- MySQL
- 개발
- 취업
- swarm
- 면접준비
- thread
- IT
- 프로그래밍
- 취업준비
- JPA
- 코드
- 프로젝트
- DevOps
- 자바
- 면접
- 인터뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |