java 21

Spring Security : JWT #26

token : 광범위하게 사용되는 용어, 암호화된 데이터 → 쿠키 세션 : 서버와 클라이언트가 반씩 가져감 FormLogin 쿠키 : 클라이언트가 가짐(브라우저에서 관리할 수 있는 아이템, 토큰은 문자열일 뿐인데 쿠키에 담아서 운영하는 것) -> id/pwd를 최초로 적용해서 해당 필터를 거친 후 토큰(2덩이)를 받아 추후에는 토큰 값만 던짐 JWT(Json Web Token) : 토큰방식에서 대표적인것이지 = 토큰은 아님 XXXX.YYYY.ZZZZ : 암호화되어있음(Base64 URL 인코딩 사용) header payload : 인증되어야할 정보. 디코딩하면 바로 보이기 때문에 민감한 정보가 들어가면 안됨 signature //실제 헤더에 토큰값이 담기는 모습 // Http header >> key :..

Spring Testing Mockito 3/3

Spring Framework 자체적으로도 지원하고 있는 Mocking 라이브러리 Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 역할 Mockito의 Mocking 기능을 이용해서 테스트하고자 하는 대상에서 다른 영역(다른 계층 또는 외부 통신이 필요한 서비스 등)을 단절시켜 오로지 테스트 대상에만 집중 Stubbing : 테스트를 위해서 Mock 객체가 항상 일정한 동작을 하도록 지정하는 것 다른 영역을 목킹해서 마치 구현한것럼 가정하고 테스트 코드를 짬 슬라이스 Test @MockBean(필드) : Application Context에 등록되어 있는 Bean에 대한 Mockito Mock 객체를 생성하고 주입 given() : Mock 객체가 특정 값을 리턴하는 동작을 지정하..

JAVA 미니 프로젝트 : BurgerQueen

java 수업과 더불어 약 1주일간(8/7~8/14) 함께 진행한 미니 PJT 버거퀸 주문 프로그램 만들기 https://github.com/youngH02/burgerqueen/tree/final_burger 메뉴 보여주고 입력받아서 장바구니 + 할인혜택 넣어주는 프로그램이다. 객체를 만들고 서로 의존관계를 가지고, 클래스 간에 어떻게 사용해야 할지에 대해 고민을 많이 했던 것같다. 막막했는데, 여차저차 일단 완성은 했다. 1. 메뉴화면 및 판매상품 정보 - 메뉴별로 객체를 만드는데 상속을 통해 다형성 사용하기 - 출력 시 각 상품의 카테고리 정보를 가지고 카테고리별로 정렬 - 사용자에게 입력받은 메뉴 번호와 각 상품을 일치시키고 장바구니로 담기 - 메뉴 구분을 위해 메뉴인스턴스 생성 시 고유한 id값..

Coding/언어-JAVA 2023.08.17

JAVA Q&A

공부하며 궁금했던 내용 정리. Q. 이터레이터 사용 시 장점? for문으로도 가능한데, 객체를 만들어가면서 쓰는게 더 좋은지? A. 이터레이터 사용 시 생성되는 객체는 작은 수준이라 프로그램 성능 등에 영향을 미치지 않는 정도이고, for 문으로도 가능하지만 이터레이터를 사용하게되면 사용상 편리해짐. 내부적으로 iterator의 동작 속도가 훨씬 빠름. Q. List 에서 중복된 데이터는 삭제 시 한개만 삭제되는지? A. 중복된 값이 있더라도, 제일 먼저 조회되는 값만 삭제 됨 Q. LinkedList 에 들어간 값이 숫자면 삭제 시 파라미터 어떻게 인식하는지? A. 숫자는 int이고, LinkedList에 들어가는 값은 Integer 객체 이므로 값인 를 삭제하려면 Integer.valueOf로 변경해..

Coding/언어-JAVA 2023.08.17

JAVA 스레드(Thread) #Day10

프로세스 : 실행중인 애플리케이션 스레드 : 프로세스 내에서 실제로 작업을 수행하는 주체 싱글 스레드 : 순차처리 멀티 스레드(스레드 n개) : 1개(코어)가 번갈아가면서 처리 → 동시성 Concurrency 여러개 스레드가 각각 처리 → 병렬성 Parallelism 스레드 생성방법 자바에서는 스레드도 클래스로 구현되어 객체로 사용되며, run() 메서드 내에 스레드가 처리할 작업을 작성 스레드 실행 시 .start() (.run()아님) 1. Runnable 인터페이스를 구현한 클래스에 run()을 정의 Thread 객체를 생성하고 사용(파라미터로 run() 메서드객체) 2. Thread클래스를 상속 받은 하위 클래스에서 run()을 정의 단일 상속으로 다른 클래스 상속이 필요할 경우 사용성 제한됨 /..

Coding/언어-JAVA 2023.08.17

JAVA 파일입출력(File I/O) #Day9

스트림(Stream) : 데이터 입출력 데이터 입출력 채널(스트림)을 열어야 읽고쓰기가 가능해짐. 스트림은 단방향으로만 데이터를 전송할 수 있기 때문에 입력과 출력 각각의 stream이 필요 예외처리 반드시 필요(ex. 파일 입출력, 네트워크, 스레드) 파일 입출력 : 바이트 스트림(1byte) : 문자, 이미지, 영상, 오디오 등 멀티미디어 가능하며 이진형태. FileInputStream / FileOutputStream BufferedInputStream / BufferedOutputStream 문자 스트림(2byte) : 문자만 가능, 문자열의 코드값이 이진데이터로 저장됨 FileReader(유니코드로 변환) / FileWriter(인코딩으로 변환) BufferedReader / BufferedWr..

Coding/언어-JAVA 2023.08.17

JAVA 사용자 입출력(Scanner, Printf)

사용자 입력 Scanner .next() : 띄어쓰기로 구분해서 값을 하나씩 받음 띄어쓰기 단어를 여러개 입력할 경우 다음 입력값에도 영향을 미치는데 .nextLine()으로 불필요한 문장을 삭제 할 수 있음 .nextLine() : 한 줄 전체를 입력으로 받음 Scanner sc = new Scanner(System.in); String name = sc.next(); name = sc.nextLine(); // 숫자 입력받기 int age = Integer.parseInt(sc.next()); age = sc.nextInt(); //정수형 아니면 오류남 double weight = Double.parseDouble(sc.next()); weight = nextDouble(); 출력 정수 출력 : %d..

Coding/언어-JAVA 2023.08.17

JAVA 익명클래스, 람다 #Day8

익명클래스(inner클래스 중 하나) 객체의 선언과 생성을 동시에 하여 오직 하나의 객체를 생성하고, 단 한 번만 사용되는 일회용 클래스 익명 객체 : 자기 자신을 만드는 클래스의 이름이 없는 객체(클래스 없이 만들어지는 객체) → 1회용 객체(클래스는 여러개의 객체) 익명 자식 객체, 익명 구현 객체(인터페이스를 구현해서 만드는 객체, 인터페이스 타입의 참조변수에 할당할 수 있다.) 1. 기존에 정의된 클래스를 활용하여 이름없이 객체 생성 시 오버라이딩하여 사용 객체를 상속해서 다른 클래스로 정의한게 아니고, 그때그때 새로운 익명클래스 객체를 만들어 반환함 public class _01_AnonymousClass1 { public static void main(String[] args) { Coffee..

Coding/언어-JAVA 2023.08.16

JAVA 에너테이션 #Day7

에너테이션 Annotation 소스코드가 컴파일되거나 실행될 떄 컴파일러 및 다른 프로그램에게 필요한 정보를 전달 즉, 주석(대상: 사람)과 유사하나 대상이 다른 프로그램임 @로 시작하며, 클래스, 인터페이스, 필드, 메서드 등에 붙일 수 있음 에너테이션 종류 표준 에너테이션 : JDK에서 기본으로 내장하고 있음 메타 에너테이션 : 커스텀 에너테이션을 정의할 때 사용 커스텀 에너테이션 : 커스텀 에너테이션을 만들기 위해 사용하는게 메타 에너테이션 1. 표준 에너테이션 @Override (메서드앞에만 가능) 상위 클래스의 메서드를 오버라이딩하거나 추상 메서드를 구현하는 메서드라는 것을 컴파일러에게 알려주는 역할 컴파일러 한테 오버라이드라고 알려줘서 오류를 찾는데 좀더 쉽게함 @Deprecated 더 이상 ..

Coding/언어-JAVA 2023.08.12

JAVA 예외(try-catch) #Day7

오류 컴파일 오류 : 코드에 문제가 있어 실행안됨(IDE 에서 시각적으로 보여서 수정이 용이함) 런타임 오류 : 컴파일 시에는 문제가 없다가, 프로그램 동작 중에 오류 발생. 에러(error)-코드를 통해 처리불가(ex. 메모리 부족, stack overflow 등) 예외(exception) - 코드실행 중에 발생하는 예기치 못한 상황이 발생하여 비정상적인 종료 발생(ex.배열인덱스 초과, 객체 생성 전 사용 등) exit code 1 : 비정상 종료 → 예외처리하면 이런 경우에도 정상종료됨 → Exceptions(예외처리 대상) - 모든예외의 조상클래스(Exception e) → Runtime Exceptions : unchecked 예외, 컴파일 과정에서 예외처리가 강제되지 않음 (ex .형변환오류,..

Coding/언어-JAVA 2023.08.11