일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- g1gc
- For
- 기초
- C++
- datatype
- Class
- IAC
- 연산자
- datastructure
- JPA
- SpringBoot Initializr
- Java
- Sprint Security
- 자료형
- ansible
- MergeSort
- jvm
- Kotlin
- Algorithm
- lambda
- redis
- Fluent-bit
- UserDetails
- If
- quicksort
- programmers
- While
- JavaScript
- Spring Security
- zgc
- Today
- Total
목록Java (29)
뭐라도 끄적이는 BLOG
SQL 중심적 개발의 문제점 현대적인 애플리케이션을 개발할 때 대부분은 객체지향 언어를 사용한다. 그리고 우리는 데이터를 저장하기 위해 관계형 데이터베이스를 사용한다. NoSQL이 많긴 하더라도 주요 DB는 오라클이나 MySQL과 같은 관계형 데이터베이스를 더 많이 사용한다. DB-Engines Ranking Popularity ranking of database management systems. db-engines.com 이렇다 보니 현재는 객체를 관계형 데이터베이스에 저장해야 되고, 저장한 데이터를 사용하는 것도 관계형 데이터베이스 테이블에서 객체로 불러와야 한다. 여기서 문제점이 발생한다. 관계형 데이터베이스는 SQL만 알아들을 수 있기 때문에 애플리케이션에선 SQL을 만들어서 보내주어야 한다. ..
JPA는? 과거에는 EJB라는 기술표준의 엔티티 빈이라는 ORM기술을 사용했지만 너무 복잡하고 기술 성숙도도 떨어졌으며 자바 엔터프라이즈 애플리케이션(J2EE) 서버에서만 동작한다는 문제점이 있었다. 여기서 ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. EJB를 사용하던 한 개발자가 이러한 문제들을 해결하고자 hibernate라는 오픈소스를 탄생시켰다. 이후 EJB3.0부터 하이버네이트를 기반으로 하여 새로운 자바 ORM 기술표준을 만들었는데 이것이 JPA이다. JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/y8OqU/btsl0W4twms/l33gien5H5FedKHvz0eHAk/img.png)
람다(java 8) public interface Printable { void print(String s); } public class Printer implements Printable{ @Override public void print(String s) { System.out.println(s); } public static void main(String[] args) { Printable prn = new Printer(); prn.print("What is Lambda?"); } } 일반적으로 인터페이스는 바로 인스턴스를 생성할 수 없기 때문에 클래스로 구현한 뒤에 사용한다. 하지만 인터페이스의 함수가 적거나 이벤트와 같이 특별한 경우에만 적용된다면 익명 클래스를 이용해서 사용하기도 한다. pu..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/qTLJE/btsl2TlmJp8/xmyKKnZ5XAaulb3F0HkHNk/img.png)
제네릭 제네릭은 JDK 1.5부터 등장하였다. 제네릭은 데이터 타입을 일반화 하는 것을 의미한다. 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일시 type check를 하면 클래스나 메소드 내부에서 사용되는 객체의 타입의 안정성을 높일 수 있으며 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. 제네릭 이전에는 클래스나 메소드의 매개변수나 반환값으로 Object타입을 사용다. 하지만 반환된 Object객체를 다시 원하는 타입으로 변환하는 과정에서 프로그래머의 실수가 잦았다. 이젠 제네릭을 사용하여 컴파일 타임에 미리 타입이 정해져 타입 검사나 타입 변환과 같은 번거로운 작업을 생략할 수 있게 되었다. 제네릭 사용법 class Bo..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bHWq0r/btsl1UZpbMW/Bkr862BYa7UzHsQrkgkZ81/img.png)
I/O 입출력 입출력(I/O)이란 Input과 Output의 약자로 입력과 출력을 말한다. 흔히 줄여서 입출력이라고들 많이 말하며 컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 예를들어 파일이나 네트워크에서 데이터를 읽고 파일에 쓰거나 네트워크를 통해 응답을 하는 동작 모두 입출력이라고 한다. Java.io & java.nio java에는 java.io와 java.nio 2가지 IO 패키지가 존재한다. nio는 new-io라고도 하며 Non-Blocking io라고도 한다. IO NIO Stream Buffer 단방향 양방향 Blocking IO Non blocking IO Selectors java.io 스트림 (Stream) Java에서 어느 한 쪽에서 다른 쪽으로 데이..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/OMqZz/btsl2cZXwEF/Qff0fVWCkisQKqYQCzEPz0/img.png)
Annotation Annotation은 주석이라는 뜻이다. 하지만 Java의 기본 주석은 "//"또는 "/* */"로 사용해왔다. 이러한 일반 주석과 Annotation의 차이점은 Annotation에선 코드를 작성할 수 있다는 것이다. 코드를 작성할 수 있다는 것은 Annotation으로 뭔가를 할 수 있다는 뜻이 된다. Annotation은 java 1.5에서 등장했다. 기존 자바는 선언적 프로그래밍 방식으로 개발을 하면서 각 계층별 설정 데이터들을 XML에 명시하였다. 이는 서비스의 규모가 클 수록 설정양이 많아지고 도메인 처리의 데이터들이 분산되어 있어 수정이 힘들었다. 이후 Annotation이 등장하면서 데이터 유효성 검사 등 직접 클래스에 명시해 줄 수 있게되어 수정이 필요할 때 쉽게 파악..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/oW1Le/btsl0XoGH8V/GezUjnagxjEh8tmUjpBiD0/img.png)
enum 정의하는 방법 Enum은 Enumeration의 약자로 열거형 이라고 부른다. public enum Week { MON,TUE,WEN,THU,FRI,SAT,SUN } class나 interface도 상수를 이용하여 같은 용도로 사용할 수 있지만 그런 용도로 사용하라고 만들어진 것이 아니기때문에 Enum을 사용하는 것이 더 좋습니다. public class Enumeration { public static void main(String[] args) { Week week = Week.FRI; switch (week) { case MON: case TUE: case WEN: case THU: case FRI: case SAT: case SUN: default: break; } } } Enum은 sw..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bBjQGV/btsl2dLmisE/y1zzR3pPkx6grLAr2mH77K/img.png)
Process와 Thread Thread에대한 공부를 시작하기전에 가장 먼저 알아야될 것은 Process와 Thread가 각각 무엇인지 알아야된다. Process란 간단히 말하면 실행중인 프로그램을 말한다. 운영체제에 의해 메모리 공간을 할당받아 실행 중인 프로그램 프로세스는 프로그램에 사용되는 데이터와 메모리등의 자원을 운영체제에서 할당받게되며 작업을 쓰레드로 구성 프로세스간 자원을 공유하기 위해서는 IPC를 활용해야 한다. Thread란 프로세스에서 실제 작업을 수행하게되는 작업의 단위 모든 프로세스에는 하나 이상의 쓰레드가 존재하여 작업을 수행 두 개 이상의 쓰레드를 가지는 프로세스를 멀티 쓰레드 라고 한다. 쓰레드는 프로세스의 자원을 공유할 수 있다. Thread 클래스와 Runnable 인터페이..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ehl9ns/btsl9Ndu53w/Ghkkzc5XiwV9RrmMxuQQ90/img.png)
자바에서 예외 처리 방법 (try, catch, throw, throws, finally) try - catch - final 예외를 처리하기 위한 try-catch기본적인 구문으로 구조는 아래와 같다. try { 예외를 처리하길 원하는 실행 코드; } catch (e1) { e1 예외가 발생할 경우에 실행될 코드; } catch (e2) { e2 예외가 발생할 경우에 실행될 코드; } try 블록은 기본적으로 먼저 실행되는 코드로 이곳에서 예외가 발생하면 catch 블록에서 처리하게 된다. catch블록은 try블록에서 발생항 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당한다. 위 코드에서 finally문을 추가해서 사용할 수 있다. try { 예외를 처리하길 원하는 실행 코드; } catc..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c8s6M3/btsl2IYCJst/lE5fQ1TSSaA9KuWzZT4B80/img.png)
인터페이스란? 인터페이스는 구체적인 방법을 직접적으로 기술하지 않고 전체적인 모습을 볼 수 있는 설계도라고 할 수 있다. 인터페이스 사용의 이유 개발 기간을 단축 시킬 수 있다. 인터페이스를 사용하면 다른 개발자들이 각각의 부분을 완성할 때까지 기다리지 않고 서로 규약만 정해두어 각자의 부분만 따로 나눠서 작성된 코드를 컴파일 할 수 있다. 클래스간 결합도를 낮출 수 있다. 코드의 종속성을 줄이고 유지보수성을 높이도록 해준다. 표준화가 가능하다. 클래스의 기본틀을 제공하여 개발자들에게 정형화된 개발을 강요할 수 있다. 자바의 다형성을 극대화 하여 코드의 수정을 줄이고 마찬가지로 유지보수성을 높인다. 인터페이스 정의하는 방법 public interface 인터페이스{ public static final 타..