'분류 전체보기' 카테고리의 글 목록 (4 Page)
본문 바로가기
728x90

분류 전체보기354

[백준] 1463 1로 만들기 자바(Java) https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 접근 방법 단순하게 접근하면 3으로 나누고, 2로 나누고, 나눌 수 없으면 -1을 하면서 값을 작게 만들면 되지 않나 생각할 수 있다. 단순 접근 : 10 -> 5 -> 4-> 2-> 1 : 4번 정답 : 10 -> 9 -> 3-> 1 : 3번 쉽게 단순 접근은 틀린 걸 알 수 있다. 이유는 10을 1로 만드는 경우에 2가지 경우의 수가 생기게 된다. 1. 9를 1로 만드는 최솟값 + 1 2. 5를 1로 만드는 최솟값 + 1 두 값 중 더 작은 값이 최솟값이 된다. 그럼 문제에서 나온 3가지 경우를 보면 최솟값.. 2022. 12. 30.
[Java] 익명 클래스(anonymous class) 이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다. 문제시 바로 삭제하겠습니다. 익명 클래스(anonymous class) 이름이 없는 일회용 클래스. 정의와 생성을 동시에 new 조상클래스이름() { // 멤버 선언 } ​ new 구현인터페이스이름() { // 멤버 선언 } class anonymous { Object iv = new Object(){ void methd(){} }; static Object cv = new Object(){ void methd(){} }; void myMethod() { Object lv = new Object(){ void methd(){} }; } } 사용하는 이유 프로그램 내에서 단발성으로 한 번만 사용.. 2022. 12. 27.
[Java] 내부 클래스(inner class) 이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다. 문제시 바로 삭제하겠습니다. 내부 클래스(inner class) 클래스 안의 클래스 class A { // 외부 클래스 ... classB { // 내부 클래스 ... // 객체 생성 없이도 A의 멤버 접근 가능 } } 내부 클래스의 장점 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. 코드의 복잡성을 줄일 수 있다.(캡슐화) 내부 클래스의 종류와 특징 내부 클래스의 종류와 유효범위(scope)는 변수와 동일 내부클래스 종류 특징 인스턴스 클래스 iv (instance class) 외부클래스의 멤버변수 선언위치에 선언하며, 외부클래스의 인스턴스처럼 다뤄진다. 주로 외부클래스의 인.. 2022. 12. 26.
[Java] 추상 클래스(abstract class), 추상 메서드(abstract method) 이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다. 문제시 바로 삭제하겠습니다. 추상 클래스(abstract class) 미완성 설계도. 미완성 메서드를 갖고 있는 클래스 abstract class Player { // 추상 클래스(미완성 클래스) abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드) abstract void stop(); // 추상메서드 } abstract - 추상 클래스라고 표현, 상속해서 구현하라는 의미 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가 Player p = new Player(); // 에러. 추상 클래스는 인스턴스 생성 불가 상속을 통해 추상 메서.. 2022. 12. 24.
[Java] super, package, import, modifier, polymorphism 이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다. 문제시 바로 삭제하겠습니다. super 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에만 존재 -> static 메서드 내에 사용 불가 조상의 멤버와 자신의 멤버를 구별할 때 사용 Class ex{ public static void main(String args[]) { Child c = new Child(); c.method(30); } } class Parent { int x = 10; } // super.x class Child extend Parent { int x = 20; // this.x void method(int x) { System.out.println("x =.. 2022. 12. 23.
[OOP] 객체 지향 개념 이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다. 문제시 바로 삭제하겠습니다. 객체 지향 개념 클래스와 객체 클래스 정의 클래스란 객체를 정의해 놓은 것 용도 클래스는 객체를 생성하는 데 사용 객체 정의 실제로 존재하는 것, 사물 또는 개념 용도 객체가 가지고 있는 기능과 속성에 따라 다름 클래스 객체 제품 설계도 제품 TV 설계도 TV 객체의 구성요소 - 속성과 기능 객체 = 속성(변수) + 기능(메서드) TV 속성(변수) 크기, 길이, 높이, 색상, 볼륨, 채널 등 기능(메서드) 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등 //TV 설계도 Class tv { String color: //색깔 boolean power; //.. 2022. 12. 22.
[우테코] 최종 코딩테스트 회고 5시간 매 순간 최선을 다해 잘 싸웠다. 우테코를 고민한다면 꼭 지원해봤으면 한다. 2022년 12월 17일 13시 5기 최종 테스트 시험을 보기 전에 떨리기도 했지만 설레는 감정이 더 컸다. 프리코스 4주간 너무 즐겁게 시간을 보내서 그런지 기분이 좋았다. 처음 문제를 분석하는데 큰 어려움을 느끼진 못했다. 문제 자체가 엄청 어렵다기보다는 세세한 부분이 중요한 문제 같았다. 구현하는 중간에 조금 아쉽게 구현한 부분이 있다고 느껴졌지만, 다시 돌아가서 수정하기엔 시간이 없을 것 같았다. 그리고 시험을 보기 전에 기능 구현 우선이라고 안내받아, 작동되는 쓰레기를 만들기로 다짐하고 그냥 진행했다. 추가로 제공해준 라이브러리가 무작위로 값을 보내주는데, 내가 설계한 순서와 맞지 않아 살짝 당황했다. 내가 생각.. 2022. 12. 19.
[Java] Optional<T> T 타입 객체의 래퍼클래스 - Optional public final class Optional { private final T value; // T타입이 참조변수 // T value는 모든 객체 저장 가능 NULL 포함 } 여기서 NULL 포함한 모든 객체 저장 가능한게 중요한 포인트다. NULL을 직접 다룬다면 NullPonterException 발생할 위험이 크고, 조건문을통해서 NULL을 확인해야 하기 때문에 Optinal 객체를 사용한다. Optinal는 객체기 때문에 주소를 가지고 있고, 그 주소가 가지고 있는 값이 NULL이기 때문에 NullPonterException 발생할 가능성이 없어진다. NULL을 직접 다루지 않기 위해 String, arr 에서는 아래와 같이 사용된다. String.. 2022. 12. 8.
웹소켓 vs SSE(Server-Sent-Event) 차이점 웹소켓 vs SSE(Server-Sent-Event) 차이점 SSE는 전통적인 HTTP를 통해 전송된다. 즉, 작동하려면 특별한 프로토콜이나 서버 구현이 필요하지 않는다. 반면 WebSocket은 프로토콜을 처리하기 위해 전이중 연결과 새로운 웹 소켓 서버가 필요하다. 또한 서버 보낸 이벤트에는 자동 재연결, 이벤트 ID 및 임의 이벤트를 보내는 기능과 같이 WebSocket은 디자인 측면에서 부족한 다양한 기능이 있다. 2022. 12. 6.
[Java] 선언 위치에 따른 변수의 종류 선언 위치에 따른 변수의 종류 public class Class { ​ int iv; // 인스턴스 변수 (Instance Valiable) static int cv; // 클래스 변수(Class Valiable) void method() { int lv; // 지역 변수(Local Valiable) } } 인스턴스 변수 클래스 내에 선언된 변수 인스턴스 변수는 인스턴스가 생성될 때 생성된다. 객체 생성 시마다 새로운 변수가 생성된다. 인스턴스 별로 다른 값을 가질 수 있다. 즉, 각각의 인스턴스 변수마다 고유의 값을 가진다. 클래스 변수 인스턴스 변수에 Static 키워드만 붙여주면 된다. 인스턴수 변수와 다르게 공통된 값을 공유하게 된다. 클래스가 메모리에 올라갈 때 부터 프로그램이 종료될 때까지 유.. 2022. 12. 5.
SSE(Server-Sent Event) SSE(Server-Sent Event) 서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술. 웹 표준으로써 IE를 제외한 모든 브라우저에서 지원되며, IE역시 polyfill을 통해 지원이 가능 동작 방식 장점 전통적인 HTTP를 통해 통신하므로 다른 프로토콜이 필요가 없다. 재접속 처리 같은 대부분의 저수준 처리가 자동으로 된다. 표준 기술답게 IE를 제외한 브라우저 대부분을 지원한다. HTML과 JavaScript만으로 구현할 수 있으므로 현재 지원되지 않는 브라우저(IE 포함)도 polyfill을 이용해 크로스 브라우징이 가능하다. (여기서 polyfill이란 브라우저가 지원하지 않는 API를 플러그인이나 JavaScript 등으로 흉내 내 구현한 것을 뜻한다) 단점 IE에선 SS.. 2022. 12. 4.
웹소켓(Web Sockets) 웹소켓(Web Sockets) HTML5 표준 기술로, 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성하고 사용자의 브라우저와 서버 사이의 인터액티브 통신 세션을 설정할 수 있게 하는 고급 기술이다. 개발자는 웹 소켓 API를 통해 서버로 메시지를 보내고 서버의 응답을 위해 서버를 폴링하지 않고도 이벤트 중심 응답을 받는 것이 가능하다. 동작 방식 순서 : 핸드쉐이크 > 데이터를 양방향으로 주고받음 > 웹소켓을 Close 장점 서버와 클라이언트 사이에서 데이터를 주고받을 수 있다. HTTP REST 메서드인 POST보다 빠르다. 여러 API 또는 여러 게임 멀티플레이에도 사용된다. 단점 프로그램 구현에보다 많은 복잡성을 초래한다. 웹 소켓은 HTTP와 달리 Stateful protocol.. 2022. 12. 2.
DB 연동 에러 HikariPool-1 - Exception during pool initialization ERROR 5084 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. 이러한 오류가 나면 application.properties 파일에 spring.jpa.hibernate.ddl-auto = none 이 조건을 추가하면 된다. 이미 만들어진 테이블 생성하는데서 오류가 난듯하다. 2022. 11. 30.
[Java] Stream, 스트림 생성 스트림이란? 스트림은 자바 8에서 추가된 기능으로 함수형 인터페이스인 람다를 활용할 수 있는 기술로 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것이다. 즉, 컬렉션과 배열을 스트림으로 만들면 이후 작업은 통일된다. 스트림의 특징 스트림은 중간연산, 최종연산이 있는데 중간 연산은 0~n번 작업 가능, 최종 연산은 마지막에 0~1번 가능 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다. 스트림은 Iterator처럼 일회용이다. 필요하면 다시 생성해야 한다. 최종 연산 전까지 중간연산이 수행되지 않는다. - 지연된 연산 IntStream intStream = new Random().ints(1,46); // 1~45범위의 무한 스트림 intStream.distinct().limit(6.. 2022. 11. 30.
[Java] 람다식 ( Lambda Expression ) 함수와 메서드 차이 함수는 클래스에 독립적, 메서드는 클래스에 종속적 java : oop 언어 + 함수형(fp) 언어 람다식이란 ( Lambda Expression) 함수를 간단한 식으로 표현하는 방법 // function int max (int a, int b) { return a > b ? a: b; } // lambda (a, b) -> a > b ? a : b 람다식 작성하기 메서드 이름과 반환 타입을 제거하고 -> 를 불록 {} 앞에 추가한다. // 익명 함수로 사용 사실은 익명 객체! int max (int a, int b) -> { return a > b ? a: b; } 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능! + 끝에 ; 안 붙인다. 블록{} 안의 문장이 하나뿐 .. 2022. 11. 29.
[AWS] mongoDB ec2 설정 프로젝트 진행중 채팅 기능 구현에 mongoDB를 사용해 채팅 서버를 구현하게되었다. ec2 Amazon Linux 에 MongoDB 설치 방법 ec2 터미널에 들어가 sudo vim /etc/yum.repos.d/mongodb-org-6.0.repo [mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc "I" 눌러서 값 입력후 "esc" 누르고 ":wq" 입력후 엔터, " " 안에 값만 입력. 콘솔창 설치 sudo yum.. 2022. 11. 29.
[JPA] @ElementCollection RDB에는 컬렉션과 같은 형태의 데이터를 컬럼에 저장할 수 없다. 별도의 테이블을 생성해 컬렉션을 관리하게된다. 컬렉션이란 그저 용도가 같거나 유사한 문서들을 그룹으로 묶은 것 JPA 에서 컬렉션 객체임을 지정하는 방법은 @ElementCollection 어노테이션을 사용하는 방법이다. // Member 클래스 @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ElementCollection(fetch = FetchType.LAZY) @Builder.Default Private Set roleSet = new HashSet(); Pu.. 2022. 11. 27.
스프링부트 몽고DB find*() query에러 spring boot with mongodb error //error at com.aks.springStorage.SpringStorageApplication.main(SpringStorageApplication.java:22) [classes/:na] Caused by: org.springframework.data.mongodb.UncategorizedMongoDbException: Query failed with error code 2 and error message 'Field 'locale' is invalid in: { locale: "testDB" }' on server localhost:27017; nested exception is com.mongodb.MongoQueryException:.. 2022. 11. 25.
[Java] 예외 처리 프로그램 오류 컴파일 에러(compile-time error) : 컴파일 할 때 발생하는 에러 주로 IDE가 기본적인 오류를 잡아줌 런타임 에러(runtime error) : 실행 할 때 발생하는 에러 에러 (error) : 심각한 오류 ex) out of memmory error 예외 (exception) : 다소 미약한 오류 Exception ... RuntimeException ... 논리적 에러(logical error) : 작성 의도와 다르게 동작 예외처리 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것으로 프로그램의 비정상 종료를 막고 정상적인 실행 상태를 유지하는 위한 것이다. 예외 클래스의 구조 Reference : https://www.benchresources.. 2022. 11. 24.
[Java] @ParameterizedTest 이름 설정, 인텔리제이 오류 @DisplayName("로또 정상 값 테스트") @ParameterizedTest(name = "[{index}] input {0} ") @ValueSource(strings = {"1,2,3,4,5,6", "1,10,20,30,40,45", "40,41,42,43,44,45"}) void lottoNumberTest(String inputString) { Lotto lotto = new Lotto(inputHandler.stringToList(inputString)); assertThat(lotto.getLottoNumbers()).isEqualTo(inputHandler.stringToList(inputString)); } you can customize invocation display names.. 2022. 11. 24.
[Jvav] Map.getOrDefault Map.getOrDefault(Object Key, Integer defaultValue) V getOrDefault(Object Key, Object defaultValue) 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없거나 null이면 기본 값을 반환한다. public static void main(String arg[]) { ​ String [] abc = { "A", "B", "C" ,"C"}; Map map = new HashMap(); ​ for(String key : abc) { map.put(key, map.getOrDefault(key, 0) + 1); } System.out.println("결과 : " + map); // 결과 : {A=1, B=1, C=2} } 2022. 11. 24.
[회고] 우아한 테크코스 5기 프리코스 4주차 회고 객체지향 설계를 할 때 저는 객체를 객체스럽게 사용하는 방법을 잘 알지 못했습니다. 응집도가 높되 결합도가 낮은 설계를 하려면 어떤 기준을 적용해야 하는지 기준이 명확하지 않았습니다. 저는 "객체지향의 사실과 오해"라는 책을 읽고 구글링을 통해 비슷한 문제를 겪은 사람들의 조언을 참고했습니다. 그 결과 저는 "같이 변경되는 코드는 같이, 같이 변경되지 않는 코드는 따로", "객체에 메시지를 보내기"라는 기준을 정했습니다. "같이 변경되는 코드는 같이, 같이 변경되지 않는 코드는 따로." 처음에 BridgeController에서 BridgeGame을 선언할 때 BridgeMap(랜덤으로 만들어진 다리)와 PlayerMap(사용자가 이동하면서 그려지는 다리)를 파라미터값으로 전달해줬습니다. 하지만 Playe.. 2022. 11. 23.
[Java] 일급 컬렉션(First Class Collection)이란? 일급 컬렉션을 간단하게 설명하면 Collection을 Wrapping하면서 그 외의 다른 멤버 변수가 없는 상태를 일급 컬렉션이라고 한다. 원시값 포장과 유사하다. 원시값을 포장하던것을 Collection을 포장하면 된다. public class Users { private List values; public Users(List values) { this.values = values; } } 위 코드가 일급 컬렉션이다. 일급 컬렉션을 사용함으로써 다음과 같은 이점을 가지게 됩니다. 비지니스에 종속적인 자료구조 ( ) Collection의 불변성을 보장 상태와 행위를 한 곳에서 관리 이름이 있는 컬렉션 1. 비지니스에 종속적인 자료구조 원시값 포장에서도 나온 개념으로 객체 자체로 검증로직을 처리할 수 있게.. 2022. 11. 22.
[회고] 우아한 테크코스 5기 프리코스 3주차 회고 든든한 지원군 테스트 코드 객체를 설계하고 테스트 코드를 작성 후 테스트 코드가 정상적으로 작동된다면 리팩토링하는 방식으로 진행했습니다. 정상값, 예외 값에 대해 테스트 코드를 작성해두니 리팩토링하다 실수한 부분을 빠른 피드백을 받을 수 있었습니다. 덕분에 리팩토링을 거침없이 진행할 수 있었습니다. 추가로 도메인 단위로 잘게 나눠주니 테스트 코드를 작성하는 게 크게 힘들지 않았습니다. 처음에 기능들이 한곳에 있으면 이걸 어떤 식으로 테스트 해야 하나 감이 잡히질 않았습니다. 하지만 객체마다 기능을 나누고, 메서드 작게 유지하고, 도메인을 분리하니 정확히 무엇을 테스트 해야 하는지 알 수 있었습니다. MVC 패턴, 도메인 아키텍처, 테스트 코드 등을 지키다 보면 코드는 자연스럽게 객체지향스럽게 작성되는 것.. 2022. 11. 18.
Token 인증 타입, Bearer 이란 무엇인가 토큰 기반 인증을 사용할 때 토큰은 대체로 요청 헤더의 Authorization 필드에 담아져 보내진다. Authorization: type 에 들어가는 값이 Bearer 값이다. 토큰에는 많은 종류가 있고 서버에도 다양한 종류의 토큰을 처리하기 위해 type 값이 다양하다. type 종류 Basic 사용자 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용합니다. (RFC 7617) Bearer JWT 혹은 OAuth에 대한 토큰을 사용합니다. (RFC 6750) Digest 서버에서 난수 데이터 문자열을 클라이언트에 보냅니다. 클라이언트는 사용자 정보와 nonce를 포함하는 해시값을 사용하여 응답합니다. (RFC 7616) HOBA 전자 서명 기반 인증방식입니다. (RFC 7486) Mutua.. 2022. 11. 18.
728x90