sinau의 등록된 링크

 sinau로 등록된 티스토리 포스트 수는 99건입니다.

[Effective Java] Item 44. 표준 함수형 인터페이스를 사용하라 [내부링크]

표준 함수형 인터페이스 java.util.function 패키지에는 총 43개의 함수형 인터페이스를 제공합니다. 이 중 6개 정도만 기억하면 나머지도 유추하기 쉽습니다. UnaryOperator T apply(T t): 반환값과 인수의 타입..

[Effective Java] Item43. 람다보다는 메서드 참조를 사용하라 [내부링크]

메서드 참조 List.of(1, 2, 3, 4).forEach(i -> System.out.println(i)); List.of(1, 2, 3, 4).forEach(System.out::println); // 메서드 참조 메서드 참조를 사용할 때 주의사항 대부분의 경우 람다에 비해 코드..

[Effective Java] Item42. 익명 클래스보다는 람다를 사용하라 [내부링크]

람다의 장점 람다식은 메서드가 하는 일을 보다 간결하고 읽기 쉽게 표현합니다. 익명 클래스로 작성된 코드입니다. Collection.sort(words, new Comparator () { public int compare(String s1, String s2){ retu..

[Effective Java] Item41. 정의하려는 것이 타입이면 마커 인터페이스를 활용하라 [내부링크]

마커 인터페이스 일반적인 인터페이스와 동일하지만 아무 메서드도 선언하지 않은 형태의 인터페이스입니다. 자신을 구현하는 클래스가 특정 속성을 가짐을 표시하기 위해 사용합니다. 대표적인 마커 인터페이스로..

[Effective Java] Item40. @Override 애너테이션을 일관되게 사용하라 [내부링크]

@Override @Override 애너테이션은 메서드 선언에만 달 수 있으며, 해당 메서드가 상위 타입의 메서드를 재정의했다는 것을 알려줍니다. 붙이지 않아도 컴파일 오류가 나지 않지만 버그를 예방할 수 있기 때문에..

[Effective Java] Item39. 명명 패턴보단 어노테이션 [내부링크]

명명 패턴 Junit 3 까지 테스트 메서드의 이름이 test 로 시작해야만 했던 것과 같이 이름을 짓는 규칙 명명 패턴의 문제 오타 올바른 프로그램 요소만 사용되리란 보증이 없음 프로그램 요소를 매개변수로 전달할..

[Effective Java] Item38. 확장가능한 열거 타입이 필요하면 인터페이스 [내부링크]

열거 타입과 확장 열거 타입은 거의 모든 상황에서 타입 안전 열거 패턴보다 우수하지만 확장하는 것은 좋지 않음 확장 타입의 원소는 기반 타입의 원소로 취급하지만 그 반대는 성립하지 않음 기반 타입과 확장..

[Effective Java] Item 37. ordinal 인덱싱 대신 EnumMap [내부링크]

예제코드 public class Plant { enum LifeCycle { ANNUAL, PERNNIAL, BIENNIAL} final String name; final LifeCycle lifeCycle; public Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeC..

[Effective Java] Item36. 비트 필드 대신 EnumSet [내부링크]

비트 필드 열거 상수 열거한 값들이 주로 집합으로 사용되는 경우, 각 상수에 서로 다른 2의 거듭제곱 값을 할당한 정수 열거 패턴 public class Text { public static final int STYLE_BOLD = 1 << 0; public sta..

[Effective Java] Item33. 타입 안전 이종 컨테이너를 고려 [내부링크]

제네릭은 Set , Map 등의 컬렉션과 TreadLocal 등의 단일원소 컨테이너에도 흔히 사용됩니다. 이런 모든 쓰임에서 매개변수화 되는 대상은 원소가 아닌 컨테이너 자신입니다. 따라서 하나의 컨테이너에서 매개변수..

[Effective Java] Item32. 제네릭과 가변인수를 함께 쓸 때는 신중하게 [내부링크]

가변인수(varargs) 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해주는데, 컴파일시 배열로 처리 됩니다. 따라서 가변인수 매개변수에 제네릭이나 매개변수화 타입이 포함되면 아래와 같은 컴파일..

[Effective Java] Item31. 한정적 와일드카드를 사용해 API 유연성을 높여라 [내부링크]

Item28에서 정리했던 것 처럼 매개변수화 타입은 불공변(invariant)입니다. 즉, List 은 List 의 하위타입이 아닙니다. 일반적으로는 이렇게 되는 것이 맞는 것 같습니다. 하지만 List 에 Integer 타입을 추가하고..

[Effective Java] Item30. 이왕이면 제네릭 메서드로 [내부링크]

클래스와 마찬가지로 메서드도 제네릭으로 만들 수 있습니다. 매개변수화 타입을 받는 정적 유틸 메서드는 보통 제네릭입니다. 제네릭 메서드 작성법은 제네릭 타입 작성법과 비슷합니다. public static Set unio..

[Effective Java] Item35. ordinal 대신 인스턴스 필드 [내부링크]

public enum Role { CUSTOMER, SHOP_MANAGER; public int getAuth() { return ordinal(); } } 알바( PART_TIMER )를 추가 public enum Role { CUSTOMER, PART_TIMER, SHOP_MANAGER; public int getAuth() { return..

[Effective Java] Item34. int 대신 Enum [내부링크]

정수 열거 패턴(int enum pattern) - 사용 X 열거 타입이 생기기 전 공통적으로 사용되는 상수를 한데 묶어서 사용했었습니다. public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN =..

[Effective Java] Item29. 이왕이면 제네릭 타입으로 [내부링크]

클라이언트에서 직접 형변환해야 하는 타입보다 제네릭 타입이 더 안전하고 쓰기 편합니다. 이를 위해서는 제네릭 타입으로 만들어야 할 경우가 많습니다. 새로운 타입을 설계할 때 뿐만 아니라 기존 타입 중 제네..

[Effective Java] Item28. 배열보다는 리스트 [내부링크]

리스트가 사용하기 더 편한 것을 제외하고서라도 배열보다는 리스트의 사용을 권장하는 이유가 있습니다. 배열은 공변이고 실체화되는 반면, 제네릭은 불공변이고 타입 정보가 소거됩니다. 그 결과 배열은 런타임..

[Effective Java] Item27. 비검사 경고를 제거 [내부링크]

제네릭을 사용하면 비검사 형변환 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환 경고 등 수 많은 컴파일 경고를 볼 수 있습니다. 이 중 제거하기 쉬운 경고도 있지만 제거..

[Effective Java] Item26. 로(raw) 타입은 사용하지 말라 [내부링크]

로 타입(raw type)을 알기전에 제네릭을 알아야 합니다. 제네릭 클래스와 인터페이스 선언에 타입 매개변수(type parameter)가 쓰이면, 이를 제네릭 클래스, 제네릭 인터페이스라 합니다. List인터페이스는 원소의..

[Effective Java] Item25. 톱레벨 클래스는 한 파일에 하나만 [내부링크]

톱레벨 클래스는 서로 다른 소스 파일로 분리합니다. 굳이 한 파일에 담고 싶다면 정적 멤버 클래스로 만들어서 한 파일에 담을 수 있습니다. 이때 private 으로 선언하면 접근 범위도 최소로 관리할 수 있습니다.

[IntelliJ] 테스트 만들 때 assertj도 static import 하기 [내부링크]

Preferences > File and Code Templates > Code탭 > Junit5 Test Class > import static org.assertj.core.api.Assertions.*; 추가

[Effective Java] Item24. 멤버 클래스는 되도록 static [내부링크]

중첩 클래스(nested class) 클래스 안에 정의된 클래스로 자신을 감싼 바깥 클래스에서만 쓰여야 합니다. 만약 그 외에 쓰임새가 있다면 톱레벨 클래스로 만들어야합니다. 중첩 클래스의 종류는 정적 멤버 클래스..

[Effective Java] Item23.태그달린 클래스보다는 클래스 계층구조 활용 [내부링크]

public class Figure { enum Shape { RECTANGLE, CIRCLE } //태그 필드 final Shape shape; //Shape가 RECTANGLE일 때만 사용 double length; double width; //Shape가 CIRCLE일 때만 사용 double radius; //RECTA..

[Effective Java] Item22. 인터페이스는 타입을 정의하는 용도로만 사용 [내부링크]

인터페이스의 용도 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 합니다. 인터페이스는 오로지 이 용도로만 사용해야 합니다. 상수 인터페이스 안티패턴 상수 인터페이스란 메서드 없이, static..

[Effective Java] Item21. 인터페이스는 구현하는 쪽을 생각해 설계 [내부링크]

인터페이스에 메서드를 추가 자바 8이후 디폴트 메서드를 통해 기존 인터페이스에 메서드를 추가할 수 있게 되었습니다. 하지만 아래와 같은 이유로 디폴트 메서드의 추가는 신중해야합니다. 디폴트 메서드를 재정..

[Effective Java] Item20. 추상 클래스보다는 인터페이스 [내부링크]

추상클래스와 인터페이스 자바는 추상 클래스와 인터페이스로 다중 구현 메커니즘을 제공합니다. 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있게 되어 두 메커니즘 모두 인스턴스 메서드를 구현 형태로..

[Effective Java] Item19. 상속을 고려해 설계하고 문서화하라 [내부링크]

메서드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야 합니다. 달리 말하면 재정의 할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 합니다. API문서의 메서드 설명 끝..

[Effective Java] Item18. 상속보다는 컴포지션 [내부링크]

여기서 말하는 상속은 다른 클래스를 확장하는 구현 상속입니다. 상속의 문제점 메서드 호출과 달리 상속은 캡슐화를 깨뜨립니다. 상위 클래스는 내부 구현이 달라질 수 있으며, 이로 인해 하위 클래스의 동작에..

[Effective Java] Item17. 변경 가능성을 최소화 [내부링크]

불변 클래스의 정의 인스턴스의 내부 값을 수정할 수 없는 클래스로 객체가 파괴되는 순간까지 절대 달라지지 않습니다. 대표적으로 String 클래스가 해당합니다. 불변 클래스의 장점 가변 클래스보다 설계, 구현,..

[Effective Java] Item16. public클래스에서는 접근자 메서드 사용 [내부링크]

public 클래스는 모든 필드를 private으로 하고 접근자를 제공하는 것이 좋습니다. public class Member { private String name; private int age; public String getName() { return name; } public int getAge()..

[Effective Java] Item15. 클래스와 멤버의 접근 권한을 최소화 [내부링크]

캡슐화의 장점 개발속도 향상: 여러 컴포넌트를 병렬로 개발할 수 있기 때문 시스템 관리비용 감소: 빠른 파악 및 적은 교체 부담 성능 최적화에 도움: 캡슐화 자체가 성능을 높여주지는 않지만, 다른 컴포넌트에..

[Java] String 형변환 방법 비교 (String) vs String.valueOf() vs toString() [내부링크]

Casting - (String) null일 경우: 문자열 "null" 반환 기본형 타입인 경우: 컴파일에러 (대신 빈 문자열을 더하면 됨, String str = 10 + ""; String이 아닌 참조형인 경우: ClassCastException 예외 발생 toStrin..

[Effective Java] Item14. Comparable을 구현할지 고려 [내부링크]

Comparable와 compareTo Comparable는 compareTo 메서드를 하나만 갖고있는 있는 인터페이스입니다. compareTo 메서드는 두 가지 성격만 빼면 eqauls와 같습니다. compareTo는 동치성 비교 뿐아니라 순서까지 비교..

[Effective Java] Item13. clone 재정의는 주의해서 진행 [내부링크]

복제 기능은 (변환)생성자와 (변환)팩토리를 이용하는게 최고입니다. (배열은 예외적으로 clone 메서드를 사용하는 것이 좋습니다.) Cloneable 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스(mixin..

[Effective Java] Item12. toString을 항상 재정의 [내부링크]

toString을 재정의하지 않으면 클래스이름@16진수의해시코드 를 반환합니다. 따라서 toString의 일반 규약에 따라서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야합니다. toString메서드는 println, printf,..

[Effective Java] Item11. equals재정의시 무조건 hashCode도 재정의 [내부링크]

equals 재정의시 hashCode를 재정의하지 않으면 해당 클래스의 인스턴스를 HashMap, HashSet과 같은 컬렉션의 원소로 사용할 때 문제가 발생합니다. 논리적으로 같은 객체는 같은 해시코드를 반환해야합니다. hash..

[Effective Java] Item10. equals는 일반 규약을 지켜 재정의 [내부링크]

equals를 재정의하면 안되는 경우 각 인스턴스가 본질적으로 고유한 경우: 값을 표현하는 것이 아닌 동작하는 개체를 표현하는 경우 인스턴스의 '논리적 동치성'을 검사할 일이 없는 경우 상위 클래스에서 재정의..

[Effective Java] Item 9. try-finally보다는 try-with-resource [내부링크]

try-finally static String firstLineOfFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } } 예외..

[Effective Java] Item 8. finalizer와 cleaner 사용을 피하라. [내부링크]

사용하지 마세요 finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있습니다. 그래서 자바9 부터는 deprecated되었고 cleaner를 대안으로 소개합니다. 하지만 이 역시 finalizer보다는 덜 위험하지만, 예측할..

[Effective Java] Item 7. 다 쓴 객체를 참조 해제하라. [내부링크]

public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } publ..

[Effective Java] Item 6. 불필요한 객체 생성을 피하라 [내부링크]

String str = new String("Hello"); String str2 = "Hello"; String str = new String("Hello"); 가 실행될 때 마다 새로운 String 인스턴스를 만듭니다. 반면, String str2 = "Hello"; 는 여러번 실행되어도 새로..

[Effective Java] Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용 [내부링크]

의존 객체 주입 패턴 public SpellChecker { private static final Lexicon dictionary = new NaverLexicon(); } 이런 맞춤법 검사기가 있는 경우 DaumLexicon을 사용하거나 특수한 어휘사전을 사용할 수 없습니다..

[Effective Java] Item 4. 인스턴스화를 막으려면 private 생성자를 사용 [내부링크]

인스턴스화를 막는 이유 java.lang.Math , java.util.Arrays 처럼 기본 타입 값이나 관련된 메서드를 모아 놓을 때 java.util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아..

[Effective Java] Item 3. private 생성자나 Enum타입으로 싱글턴임을 보증하라 [내부링크]

싱글턴(Singleton)? 객체의 인스턴스를 오직 1개만 생성할 수 있는 클래스를 말합니다. 싱글턴을 만드는 방법 private생성자 + public static 필드를 통해 인스턴스에 접근 private생성자 + 정적 펙토리 메서드 열..

[Effective Java] Item 2. 생성자에 매개변수가 많다면 빌더 [내부링크]

생성자에 매개변수가 많다면? 생성자(또는 정적 팩토리 메서드)는 선택적 매개변수가 많을 때 문제가 있습니다. public class User { private final String name; //필수 private final String birth; //필수 priv..

[Effective Java] Item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 [내부링크]

정적 펙토리 메서드(static factory method)란? 정적 펙토리 메서드에서 펙토리란 객체를 생성하는 역할을 이야기 합니다. 즉 객체를 생성하는 static method라고 생각하면 편합니다. 정적 팩토리 메서드의 장점(..

[Apache POI] autoSizeColumn이 정확하게 동작하지 않을 때 [내부링크]

해당 컴퓨터에 설치되어 있지 않은 폰트인 경우 정확하게 동작하지 않습니다.

[Oracle] LAG, LEAD 알아보기 [내부링크]

LAG함수와 LEAD함수의 정의 및 구조 LAG 함수 : 자체 조인을 사용하지 않고 이전 행을 리턴하는 함수 LEAD 함수: 자체 조인을 사용하지 않고 다음 행을 리턴하는 함수 LAG(expression [, offset] [, default]) OVE..

[Hibernate] ScriptAssert사용시 HV000232: No JSR 223 script engine found for language "javascript" [내부링크]

@ScriptAssert 를 사용하면 HV000232: No JSR 223 script engine found for language "javascript" 오류가 발생했습니다. 결론부터 얘기하면 jdk버전 문제였습니다. 조금 디테일하게는 JVM의 Javascript Engine 문..

[IntelliJ] 영어 자간 및 폰트가 이상하게 써질때 [내부링크]

영어가 이상하게 써질때 Alt + = 조합으로 원래대로 돌릴 수 있습니다. IntelliJ 뿐 아니라 Word, Excel, PowerPoint 등에서도 Alt + = 이 먹힙니다.

[Tomcat] 캐시에 추가할 수 없습니다. 왜냐하면 만료된 캐시 엔트리들을 없애버린 이후에도 여유 공안이 충분하지 않기 때문입니다. 캐시의 최대 크기를 증가시키는 것을 고려해 보십시오. [내부링크]

톰캣 10.0 공식문서에 의하면 캐시의 최대 크기는 10mb라고 합니다.(8.0, 9.0도 동일) The maximum size of the static resource cache in kilobytes. If not specified, the default value is 10240 (10 megabyte..

[IntelliJ] Live Templates만들기 (sout, main 이런거) [내부링크]

Preferences (환경설정) > Editor > Live Templates 우측의 +버튼 클릭 > Live Template 선택 Abbreviation: 단축어 Description: 단축어에 대한 설명 Template text: 단축어의 수행 기능 ( $END$부분에 커서가..

[IntelliJ] cannot find Symbol [내부링크]

class MyClass implements MyInterface가 있을 때 MyInterface를 찾지 못했다고 오류 발생 Build메뉴의 Rebuild Project로 해결

[Java] cannot access the classes in the package [내부링크]

me.study.MemberService를 구현한 me.study.MemberServiceImpl에서 이러한 문제가 발생했습니다. 빌드 하는 것은 문제가 없었지만 Problems에 뜨는 것도 보기 좋지 않았고 무엇보다 code completion(content assis..

[Homebrew] Unknown command: cask [내부링크]

The most significant changes since 2.5.0 are macOS Big Sur support on Intel, brew commands replacing all brew cask commands, the beginnings of macOS M1/Apple Silicon/ARM support and API deprecation..

[Oracle] 예약어 확인(ORA-00903 / ORA-00904) [내부링크]

USER라는 테이블을 생성합니다. CREATE TABLE USER ( ID VARCHAR2(10) ); 이 간단한 DDL은 ORA-00903: invalid table name 오류를 냅니다. 그 이유는 테이블명을 오라클 예약어로 사용했기때문입니다. CREATE TABL..

[JAVA] JVM [내부링크]

JVM(Java Virtual Machine) JVM이란? Java의 가장 큰 특징 중 하나는 OS(Operating system)에 독립적이라는 것 입니다. 먼저, 개발자가 .java 파일을 생성합니다. 이를 Java Compiler의 javac 라는 명령어를 이용..

[MySQL] ROWNUM 사용하기 [내부링크]

위와 같은 테이블이 있을 때 SELECT @ROWNUM := @ROWNUM + 1 AS rownum, table.* FROM table, (SELECT @ROWNUM := 0) tmp ORDER BY birth ASC 역순으로 정렬하면서 rownum을 가져오고 싶은 경우 어떻게 해야 할..

[ORACLE] ORA-00907 missing right parenthesis [내부링크]

괄호, 콤마가 빠진경우에 발생합니다.

[JAVA] 반복문에서 String 변수의 선언 위치 [내부링크]

반복문 내에 String 변수 선언하는 것은 성능에 나쁜 영향을 끼친다 라는 얘기를 어디선가 들은 적이 있습니다. 아마 반복문 내부에 변수를 선언하면 매 번 변수를 초기화하지 않을까 라는 생각에 이런 얘기를 하..

[JPA] 기본 키(PK) 매핑 방법과 생성 전략 [내부링크]

기본 키(Primary key)? 주 키 또는 프라이머리 키라고 하며, 관계형 데이터베이스에서 레코드의 식별자로 가장 적합한 것으로 선택, 정의된 후보 키입니다.(출처: 위키백과) 기본 키의 (제약) 조건 기본 키는 데이..

[JPA] Persistence Context(영속성 컨텍스트) [내부링크]

Persistence Context EntityManager로 Entity를 저장하거나 조회하면 EntityManager는 영속성 컨텍스트에 Entity를 보관하고 관리합니다. 영속성 컨텍스트는 논리적인 개념에 가까우며 EntityManager를 생성 할 때..

[IntelliJ] Auto Import(Eclipse의 Ctrl + Shift + O) [내부링크]

환경설정 > Editor > General > Auto Import > 아래 스크린샷의 체크박스부분 체크 > 저장

[JPA] Entity EntityManager EntityManagerFactory PersistenceContext [내부링크]

Entity 테이블에 대응하는 클래스입니다. Entities in JPA are nothing but POJOs representing data that can be persisted to the database. An entity represents a table stored in a database. Every instanc..

[JPA] QueryDSL Q class 생성 안될때 [내부링크]

터미널에 mvn clean compile -DskipTests

[Docker] docker 컨테이너, 이미지 삭제 [내부링크]

동작중인 컨테이너 확인 $ docker ps 모든 컨테이너 확인 $ docker ps -a 컨테이너 삭제 $ docker rm [컨테이너ID] 컨테이터 여러개 삭제 $ docker rm [컨테이너ID], [컨테이너ID] 컨테이너 전부 삭제 $ docker rm..

[Docker] Mac에서 brew로 docker 설치하기 [내부링크]

brew cask가 dedeprecated되고 그냥 brew install로 설치할 수 있도록 변경되었습니다.(--cask옵션을 줘도 됩니다.) $ brew install docker docker-machine $ brew install virtualbox -> System Preference > Sec..

[Git] gitignore 적용 안될 때 [내부링크]

gitignore가 적용이 안될 때가 있습니다. git의 캐시 문제로 캐시를 삭제해 주고 다시 커밋하면 됩니다. git rm -r --cached . git add . git commit 처음에 이 명령어를 봤을 때 .이 안보여서 git rm -r --cached..

[Spring] Spring Framework뼈대 [내부링크]

Spring Framework (Core) 프레임워크 전체를 가리키는 동시에 프레임워크의 핵심부분을 가리키기도 합니다. DI를 위한 단독 프레임워크로 개발돼었습니다. DI 기능은 다른 라이브러리와 상관없이 개별적으로 사용..

[Java] String.split(".") [내부링크]

문자열을 split(".") 할 때 결과값으로 공백이 나오는 경우가 있습니다. 이는 split() 메서드가 정규식으로 작동하기 때문입니다. 그럼 . 으로 자를 때 어떻게 잘라야 하는지 알아보겠습니다. public class split..

[Spring] IoC [내부링크]

IoC(Inversion of Control) 제어의 역전이란 뜻입니다. 초기에는 개발자가 객체를 생성하고 의존관계를 직접 설정하였는데 이를 제어라고 합니다. 이 제어라는 행동을 컨테이너라는 것에 맡기는 것을 제어권이 역..

[Java] List 중복 제거하기 [내부링크]

List 중복제거 List는 기본적으로 중복을 허용합니다. 하지만 때때로 필요에 따라 List의 중복을 제거해야 할 때가 있습니다. 오늘은 List의 중복을 제거하는 방법에 대해 알아보겠습니다. public class ListDisti..

[Spring] AOP 구현 - Annotation [내부링크]

지난 시간에는 AOP를 xml 스키마 기반으로 구현해봤습니다. 이번에는 @Aspect 어노테이션을 통해 구현해보도록 하겠습니다. 전의 소스를 대부분 재활용 했습니다. public interface Attendance { public void Atte..

[Spring] ORM, JPA, Hibernate, Spring Data JPA의 개념 [내부링크]

Persistence(영속성) 프로세스가 생성했지만 별개로 유지되는 상태의 특징 즉, 프로그램이 종료되더라도 데이터가 사라지지 않는 특성을 뜻합니다. Persistence Layer Layered Architecture의 구성요소 중 하나입..

[Git] commit 날짜 변경 [내부링크]

마지막 commit 날짜를 오늘로 설정 git commit --amend --no-edit --date "${date)" 마지막 commit 날짜를 임의의 날짜로 설정 git commit --amend --no-edit --date "Tue 7 Jul 2020 22:43:20 KST" git에는 autho..

[Spring] AOP 구현 (XML) [내부링크]

AOP 구현 스프링 AOP를 구현하는 방법에는 두가지가 있습니다. XML 스키마 기반의 자바 POJO 클래스를 이용하여 구현 @Aspect 어노테이션 이용하여 구현 POJO(Plain Old Java Object) 순수한 자바 객체를 의미합니..

[Spring] AOP의 개념 [내부링크]

AOP Aspect Oriented Programming의 약자로, 관점(관심,기능) 지향 프로그램이란 뜻입니다. 공통 기능과 핵심 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법입니다. AOP의 기본 개념은 핵심 기능에 공..

[Spring] @Autowired @Resource @Inject @Qualifier [내부링크]

@Autowired, @Resource, @Inject의 역할 세 어노테이션의 공통점은 자동 의존 주입(DI) 입니다. @Autowired, @Resource, @Inject의 차이점 @Autowired @Resource @Inject 지원 Spring Framework에서 지원 Java에서..

[MySQL] ERROR 2003: Can't connect to MySQL server on 'localhost' (10061) [내부링크]

오류발생 어제까지 잘만되던 MySQL이 갑자기 접속오류가 발생했습니다. root 계정으로 로그인을 시도하니 ERROR 2003: Can't connect to MySQL server on 'localhost' (10061) 오류가 발생합니다. 보통 계정 비밀..

[Java] String = ""; vs new String(""); [내부링크]

보통 자바를 처음 배울 때 String hello = "Hello, World"; 이렇게 작성 한 후 이걸 출력하는 예제를 따라칠 것 입니다. 그래서 자바를 처음 배우시는 분들은 new String() 에 대해 생소하실 수 도 있습니다. 오늘..

[Java]Immutable Object(불변객체) [내부링크]

Mutable Object? Immutable Object? Immutable Object(불변객체)는 객체 생성 후 그 상태를 바꿀 수 없는 개체입니다. 다르게 말하면 할당 된 데이터를 바꿀 수 없는 객체입니다. 예를 들어 String[] arr = {"a",..

[Java] 배열을 ArrayList로 변환 [내부링크]

배열을 ArrayList로 변환 하는 방법을 알아보고 그 반대의 경우도 알아보겠습니다. 배열 => ArrayList ```java public static void main(String[] args) { String[] arr = {"The", "URL", "of", "my", "blog", "is..

[Java] 자바 날짜, 시간 API의 형변환 방법 [내부링크]

final static LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2020, 6, 29, 21, 55, 10); final static LocalDate LOCAL_DATE = LocalDate.of(2020, 6, 29); final static LocalTime LOCAL_TIME = LocalTime.o..

[Java] LocalDateTime [내부링크]

JDK 8 이전에는 java.util.Date , java.util.Calendar 클래스를 대체하기 위해서 Joda-Time 같은 오픈소스 라이브러리를 사용했었다고 합니다. 간단하게 위 두 클래스의 문제점을 알아보고 JDK 8부터 바뀐 Java의..

[IntelliJ] release version 5 not supported 오류 [내부링크]

문제점 IntelliJ + Spring MVC + Maven 프로젝트에서 컴파일 시에 release version 5 not supported 가 발생했습니다. 원인 Project Structure > Project Settings > Modules의 Sources탭 > Language Level이 5로..

[Tomcat] 톰캣 로그 한글에서 영어로 바꾸는 방법 [내부링크]

문제점 톰캣 로그가 한글로 나오는 경우가 있습니다. 해결방법 1. catalina.sh 열기 CATALINA_HOME/bin/catalina.sh를 텍스트 편집기로 엽니다. 2. JAVA_OPTS에 옵션 추가 JAVA_OPTS에 -Duser.language=en 을..

IntelliJ에서 SpringMVC + Maven + Tomcat [내부링크]

Create New Project 버튼을 클릭합니다. Maven 을 선택합니다. 프로젝트 정보를 입력합니다. 프로젝트가 생성되면 프로젝트를 우클릭하여 Add Framework Support... 을 클릭합니다. Web Application 을 체크합..

[ORACLE] DDL, DML, DCL [내부링크]

SQL문은 다루는 객체, 용도에 따라 DDL, DML, DCL(+TCL)로 분류 할 수 있습니다. DCL에서 COMMIT , ROLLBACK , SAVEPOINT 를 따로 분리하여 TCL(Transaction Control Languaage)라고 표현하기도 합니다. 각각 어떤..

Spring Validator를 이용하여 유효성 검사 [내부링크]

Spring에서 유효성을 검사하는 방법 Spring Validator 구현 Bean Validation Bean Validation 1.0(JSR-303) Bean Validation 1.1(JSR-349) Bean Validation 2.0(JSR-380) 두 가지 방법 중 Validator 인터페이스를..

[Java] 배열을 복사하는 방법 [내부링크]

복사의 종류 객체를 복사하는 유형은 객체의 주소를 복사하는 얕은 복사(Shallow Copy)와 객체를 완전히 복사하는 깊은 복사(Deep Copy)가 있습니다. 얕은 복사 객체의 주소를 복사하기 때문에 여러 객체가 같은..

[Homebrew] Homebrew로 톰캣 설치시 환경변수 [내부링크]

Homebrew 로 톰캣을 설치하면 환경변수가 tomcat/버전/libexec/bin으로 잡혀있습니다. 물론, 톰캣 실행은 아래의 명령어로도 실행할 수 있습니다. /usr/local/opt/tomcat/bin/catalina run

[오류] Port already in use: 1099 [내부링크]

오류내용 java.rmi.server.ExportException: Port already in use 원인 기존에 사용중인 1099 포트가 정상종료되지 않고 재시작할 경우 발생합니 해결방법 1. PID 찾기 lsof -i :포트번호 터미널에서 losf -i :10..

[Spring] Spring Boot H2 Database Console 사용하기 [내부링크]

H2 Database H2 Database는 자바로 작성된 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 공식 홈페이지에서 설명하는 H2 Database의 특징은 다음과 같습니다. 매우 빠른 JDBC API 오픈 소스 (Very fast, open s..

[iTerm2] iTerm2에서 Dracula 테마 사용하기 [내부링크]

git clone https://github.com/dracula/iterm.git Dracula 테마를 다운로드 받습니다. 다운로드 받은 디렉토리의 Dracula.itermcolors 파일을 더블클릭하면 자동으로 iTerm2 테마에 추가됩니다. iTerm2의 설정..

[Java] Wrapper class와 Auto Boxing [내부링크]

Wrapper class ArrayList nubmers = new ArrayList (); // Invalid ArrayList numbers = new ArrayList (); // Valid primitive type의 데이터를 객체로 취급해야 하는 경우가 있습니다. 이럴 경우 primitive type..

[Java] java.util.Date와 java.sql.Date의 차이점 및 변환 [내부링크]

차이점 java.util.Date 유닉스 시간(1970년 1월 1일 00:00:00 GMT)으로 부터 지정된 시간(milliseconds)을 년/월/일/시/분/초 의 형태로 갖고 있습니다. java.sql.Date java.util.Date 를 상속받으며 SQL Date 값..

[IntelliJ] 자동완성(Code Completion) 대소문자 구분 없이 사용하기 [내부링크]

Preferences > Editor > General > Code Completion > Match case 를 해제합니다.

[Homebrew] Homebrew 를 이용해 Git, Chrome 설치하기 [내부링크]

Homebrew? Homebrew는 macOS용 패키지 관리 시스템입니다. cli 도구뿐 아니라 cask 를 통해 macOS 애플리케이션을 설치할 수도 있습니다. Homebrew 설치 아래 스크립트를 복사하여 터미널에 붙여 넣습니다. /bin/..

[Markdown] 마크다운 문법 정리 [내부링크]

마크다운? 마크다운은 텍스트를 HTML로 변환하는 도구입니다. 확장자는 .md (또는 .markdown )이며 content-type은 text/markdown 입니다. 마크다운의 장, 단점 장점 간결합니다. 별도의 도구 없이 작성 가능합니..