전체 글

전체 글

    [Java] Enum

    enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet Enum 열거형(enum)은 서로 관련된 상수를 편리하게 선언하기 위해 JDK1.5부터 새로 추가되었습니다. Enum 정의하는 방법 enum 열거형이름 다음에 괄호{}안에 상수의 이름을 나열하면 됩니다. enum 열거형이름 { 상수명1, 상수명2, ... } 예시) 동서남북 4방향 열거형 enum Direction { EAST, SOUTH, WEST, NORTH } Enum 비교방법 '==' 사용 가능 '>' '

    [Java] 애노테이션

    애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로 관리하는 것이 낫다고 생각했습니다. 그래서 소스코드의 주석 '/** ~ */'에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램인 javadoc.exe 를 만들어 사용했습니다. 아래는 모든 애노테이션의 조상은 Annotation 인터페이스의 실제 소스코드의 일부입니다. '/**'로 시작하는 주석 안에 소스코드에 대한 설명들이 있고, 그 안에 '@'이 붙은 태그들이 보입니다. 미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, javadoc.exe가 이 ..

    [Class Flix] EP 19. 타임리프 리팩토링

    Home 검색창에서 태그의 id 들을 th:field로 교체하기 (사이드 이펙트 발생하는지 판단하기) String 타입의 멤버들은 th:field로 지정하면 멤버변수의 이름으로 id, name, value가 자동으로 생성되지만 String 타입이 아닌 Integer 타입 ratingGoe는 값 자체로 지정이 됩니다. 그래서 JS가 동작하지 않는 문제가 발생합니다. 따라서 String 타입의 멤버들만 th:field로 교체해주었습니다. 사이트 이름 강의 이름 강의자 이름 별 점 + - search 검색창의 rating 표시부분의 value 부분을 스프링에서 보내주는 데이터로 바꾸기 검색파라미터들을 다 으로 보내주려 했으나 타입이 다 달랐고 특히 ratingGoe는 처리가 더 복잡해질 것 같아 냅뒀습니다. ..

    [Java] 멀티쓰레드 프로그래밍

    학습할 것 Thread 클래스와 Runnable 인터페이스 쓰레드의 상태 쓰레드의 우선순위 Main 쓰레드 동기화 데드락 Thread 클래스와 Runnable 인터페이스 쓰레드를 생성하는 방식에는 두가지가 있습니다. Thread 클래스 상속 Runnable 인터페이스 구현 Thread 클래스 상속 class MyThread extends Thread { public void run() {} } Runnable 인터페이스 구현 class MyThread implements Runnable { public void run() {} } 차이점 다음의 코드를 통해서 두 방식의 차이점을 알아보겠습니다. package javastudy.ch10; public class ThreadEx1 { public static..

    [Java] 예외

    예외처리 프로그램 오류는 발생시점에 따라 3가지로 나눌 수 있습니다. 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 에러가 발생하면, 프로그램의 비정상적인 종료를 막을 길이 없지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 놓음으로써 프로그램의 비정상적인 종료를 막을 수 있습니다. Exception과 Error의 차이 에러는 일단 발생하면 복구할 수 없는 심각한 오류(메모리부족, 스택오버플로우 등)이고 예외는 발생하더라도 수습할 수 있는 비교적 덜 심각한 것 에러가 발생하면 프로그램은 비정상적인 종료를 하지만, 예외는 발생하더라도 프로그래머가 이에 대한 적절한 코드를 미리 작성해 ..

    EP1. 타임리프 Thymeleaf

    toc링크기능이 추가가 안되어있어서 필요한 부분은 Ctrl+F 로 찾아서 보시면 됩니다~ 목차 타임리프 사용 선언 텍스트 - text, utext - Escape HTML 엔티티 springEL 표현식 지역변수 선언 기본 객체들 - 편의 객체 유틸리티 객체 - 자바8 날짜 URL 링크 리터럴 - 리터럴 사용 예시 연산 비교연산 조건식 - Elvis 연산자 No-Operation 속성 값 설정 속성 설정 - 속성 추가 - checked 처리 반복 - 반복 상태 확인 조건부 평가 주석 - HTML의 주석 - 타임리프의 주석 블록 자바스크립트 인라인 - 자바스크립트 인라인 each 템플릿 조각 템플릿 레이아웃 1 템플릿 레이아웃 2 타임리프 사용 선언 타임리프를 사용하기 위해서는 타임리프 선언을 해야합니다. ..

    [Java] 인터페이스

    학습할 것 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스의 정의 interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수 목록); } 인터페이스 멤버의 제약사항 - 모든 멤버변수는 public static final이어야 하며, 이를 생략할 수 있다. - 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다. 단, static 메서드와 디폴트 메서드는 예외 예시) ..

    [ClassFlix] EP 18. QueryDSL 도입 (검색기능)

    Querydsl의 꽃 검색기능을 도입합니다. 서비스 계층 설계 조건을 저장하고 전달하는 DTO를 생성합니다. 해당 dto의 인스턴스를 검색,페이징,정렬기능을 하는 리포지토리에 넘겨줍니다. where절에서 동적쿼리를 위한 Eq, Goe 메서드를 구현하고 넘겨받은 condition dto를 이용해 동적쿼리를 만들어 결과를 구합니다. 서비스 계층 구현 페이징과 정렬을 구현할때 동적쿼리는 거의 다 짜놔서 condition dto 생성과 where절 수정만 해주면 서비스 계층 구현은 될 것 같습니다. LectureSearchCondition package dongho.classflix.controller.dto; import lombok.Data; @Data public class LectureSearchCond..

    [Java] brew로 자바 특정버전 설치하고 적용하기

    brew로 최신 Java를 설치하려면 아래와 같이 치면 됩니다. $ brew install --cask java 하지만 여러 이유로 최신버전이 아닌 다른 특정버전을 설치해야할 경우가 있습니다. 자바 특정버전 설치방법 brew 업데이트. brew를 쓰기전에 항상 업데이트먼저 하시는 것을 추천드립니다. $ brew update 원하는 jdk버전 적용해서 설치 $ brew install --cask adoptopenjdk8 설치완료 환경변수 설정 새로운 버전의 jdk를 설치했음에도 java -version을 해보면 원래 쓰던 jdk 버전이 나옵니다. 이 이유는 클래스패스 (환경변수) 설정이 되어있지 않기 때문입니다. 저는 zsh를 사용하기 때문에 .zshrc에 Path를 적어주겠습니다. (bash를 사용하시는..

    [Java] 패키지

    Pakage 패키지란, 클래스의 묶음입니다. 패키지에 클래스나 인터페이스들을 포함시킬 수 있으며, 서로 관련된 클래스끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있습니다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 다른 개발자가 개발한 클래스와 자신의 클래스의 이름이 충돌하는 것을 피할 수 있습니다. 클래스가 물리적으로 하나의 클래스파일(.class)인 것과 같이 패키지는 물리적으로 하나의 디렉토리입니다. 사실 클래스의 이름은 패키지까지 포함한 이름입니다. 그래서 String 클래스의 실제 이름은 java.lang.String 입니다. 패키지 특징 (주의사항) 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다. 모든 클래스는 반..