전체 글 33

[JAVA] STREAM(스트림)

스트림이란? 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴 람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성 반복에서 스트림 연산으로 전환하기 스트림을 이용하면 필터링과 카운팅을 증명하기 위해 루프를 살펴볼 필요가 없다. 루프에서는 연산순서를 자세히 작성해야하지만, 스트림은 결과만 맞으면 연산을 스케줄링할 수 있다. //filter메서드 //루프를 이용한 연산 int count = 0; for (String w : words) { if (w.lengh() >12) count++; } //스트림을 이용한 연산 long count = words.stream() .filter(w -> w.length() >12) .count(); 스트림은..

JAVA(SPRINGBOOT) 2022.12.16

[DESIGN PATTERN] SOLID 원칙 (객체지향 5대원칙)

SRP(Single Responsibility Principle) 단일 책임 원칙 소프트웨어의 설계부품(클래스, 메서드 등)은 하나의 책임만 가질 수 있도록 설계해야한다. 책임은 기능으로 해석 설계를 잘한 프로그램은 새로운 요구사항이나 오류로 인한 변경 사항이 적다. 맡은 책임이 많아질수록 결합도가 높아지기 때문에 책임을 최소화하여 결합도를 낮추고 응집도를 높이는 것이 목표 OCP(Open-Closed Principle) 개방-폐쇄 원칙 기존 코드를 변경하지 않고 기능을 추가하거나 수정할 수 있도록 설계하여야한다. 자주 변경될 수 있는 것들은 수정하기 쉽게, 변경되지 않는 것들은 변화에 영향을 적게! 이를 위해 쓰는 것이 Interface 예를 들어, 러닝머신을 설계한다고하면 러닝머신 클래스의 필드로 사..

DESIGN PATTERN 2022.12.14

[JAVA] INTERFACE(인터페이스)

인터페이스의 역할 인터페이스(Interface)는 객체의 사용방법을 정의한 타입 개발코드와 객체가 서로 통신하는 접점 역할 개발코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메서드를 호출 코드에서 직접 객체의 메서드를 호출하지 않는 이유는 사용하는 객체를 코드 수정없이 변경하기 위함이다. 인터페이스는 여러 객체들과 사용이 가능하므로 어떤 객첼를 사용하느냐에 따라 실행 내용과 리턴값이 달라진다. 인터페이스의 선언 public interface InterfaceName { ''' } 클래스는 필드, 생성자, 메서드로 구성되지만 인터페이스는 상수와 메서드만으로 구성된다. 인터페이스는 객체로 생성할 수 없기때문에 생성자를 가질 수 없다. public interface 인터페이스명 { //상수 타입 상..

JAVA(SPRINGBOOT) 2022.12.06

[ERROR] redis 사용시 같은 Key값으로 다른 프로젝트에서 저장

redis를 이용해 채팅 기능을 구현하는 중이었다. 채팅방 생성은 ARC를 통해 redis에 저장할 수 있었으나 메세지 보내는 socket 통신 확인이 어려워 새 프로젝트를 생성하고, 실습을 계속 이어갔다. 새 프로젝트폴더에서도 채팅방 생성까지는 잘 되었으나 채팅방 목록을 불러오는 과정에서 다음과 같은 에러에 부딪혔다. com.team1.dodam.domain.ChatRoom은 기존 프로젝트 폴더의 채팅방관련 파일이다. 처음에는 전혀 감을 잡지 못해 '왜 ChatRoom을 찾지 못 할까?' 하고 구글링만 했다. 그러던 중 문득 기존 프로젝트에서 채팅방 생성을 한게 떠올랐고, 새 프로젝트에서 컴파일해 실행할 때 기존 프로젝트 관련 정보를 찾지 못하는게 당연하다는 생각이 들었다. 그래서 redis내에 저장된..

TROUBLE SHOOTING 2022.09.14

[SPRING JPA] ORM, JPA, Hibernate

ORM Object-Relational Mapping 객체가 테이블이 되도록 매핑 시켜주는 것 SQL Qeury가 아닌 직관적인 메서드로 데이터를 조작 JPA Java Persistence API (자바 ORM 기술에 대한 표준 명세) ORM을 사용하기 위한 인터페이스를 모아둔 것 Hibernate JPA를 사용하기 위해서 JPA를 구현한 ORM 프레임워크중 하나 JPA 인터페이스의 실제 구현부를 담당 장점 생산성 SQL를 직접 사용하지 않고, 메서드 호출만으로 쿼리가 수행 (쿼리를 보면서 의도한 대로 쿼리가 짜여졌는지, 성능은 어떠한지에 대한 모니터링이 필요하기 때문에 SQL을 잘 알아야 함) 유지보수 DAO의 파라미터, 결과, SQL 등을 모두 확인하여 수정하지 않고 JPA가 대신 수행 종속성 JPA..

JAVA(SPRINGBOOT) 2022.09.13

API, WAS, HTTP, RESTful API, CORS

API (Application Programming Interface) 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타내고, 인터페이스는 두 애플리케이션 간의 서비스 계약을 나타낸다. API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘 API는 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의한다. API의 종류 SOAP API : 단순 객체 접근 프로토콜을 사용, XML을 사용하여 메시지를 교환, 유연성이 떨어지는 API RPC API : 원격 프로시저 호출, 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송 Websocket API : JSON 객체를 사용하여 데이터를 전달하..

JAVA(SPRINGBOOT) 2022.08.10

ORM, SQL, MVC

Object Relational Mapping(ORM), 객체-관계 매핑 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 객체 모델과 관계형 모델 간에 불일치가 존재한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. Structed Query Language(SQL), 구조적 질의 언어 관계형 데이터베이스에서 자료를 관리 및 처리하기 위해 설계된 언어 SQL 문법 종류 1. DDL(Data Definition Language) : 릴레이션 정의 2. DML(Data Manipulation Language) :데이터 관리 3. DCL(Data Cont..

JAVA(SPRINGBOOT) 2022.08.08

[ERROR] BUILD후 jar 실행 시 생기는 에러

부트캠프를 하며 과제를 한 후 빌드 파일을 만들어 배포하는 과정에서 jar파일을 실행하는 과정에서 에러가 발생했다. 위와 같이 에러가 발생했는데 에러 이유를 찾아보다 Lookup method resolution failed Failed to introspect Class 두 가지 문구로 부터 에러 발생 이유를 찾을 수 있었다. 컴파일 후 실행하는 과정에서 Class를 불러올 수 없는게 문제였다. build.gradle의 dependency에 compileOnly 'com.auth0:java-jwt:3.19.2' 위와 같이 작성되어 있었고, implementation 'com.auth0:java-jwt:3.19.2' 다음와 같이 수정해주었더니, 에러가 해결되었다.

TROUBLE SHOOTING 2022.08.04

IoC, DI, Bean

IoC (Inversion of Control) IoC는 '제어의 역전'이라고 해석되어 진다. 우리는 일반적으로 A클래스 내에서 B클래스의 객체를 불러와 사용할 때 두 클래스간의 의존성이 생긴다. 많은 클래스들간의 의존성이 생길 때 수많은 생성자를 통해 객체를 생성해야하고 이는 코드의 가독성을 떨어뜨리는 문제가 발생했다. 그래서 우리는 A클래스 내에서 B클래스 객체를 생성하는 방법대신 만들어진 B클래스의 객체를 A클래스에서 사용하는 방법을 사용하게 되었다. 이런 제어 방법을 기존의 제어 흐름과 반대 된다고 하여 제어의 역전, 'IoC'라고 부른다. DI (Dependency Injection) DI는 IoC과정에서 만들어진 B클래스 객체를 A클래스에서 사용할 수 있도록하는 것 즉, A와 B 클래스의 의존..

JAVA(SPRINGBOOT) 2022.07.31