Back-end 185

스프링에서 자주 사용하는 기본 @어노테이션 정리

@ 어노테이션이란? 어노테이션의 사전적 의미는 주석이지만 Java에서는 그 이상의 메타 데이터 역할을 한다. 어노테이션을 선언하여 특수한 기능을 사용할 수 있다. @Component 스프링에서 관리하는 객체임을 표기하는 가장 기본적인 범용 스테레오타입 어노테이션. 스프링 빈으로 등록시키는 역할을 수행. Application Context에서 스프링 빈을 등록할 때, 빈으로 등록할 후보 클래스들을 탐지하여 등록한다. 에서는 @Component만 스캔하도록 되어있다. 당연하게 쓰던 어노테이션을 따라가서 소스를 살펴보자.... ex) @Controller @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Component public @inte..

Spring DI 스프링 의존성 주입 3가지 방법

Spring DI 스프링에서 의존성 주입(DI)이란, 객체간 의존성을 개발자가 객체 내부에서 직접 호출(new연산자)하는 대신, 외부(스프링 컨테이너)에서 객체를 생성해서 넣어주는 방식이다. 외부에서 두 객체 간의 관계설정을 해주는 디자인 패턴으로, 인터페이스를 사이에 두어 클래스 레벨에서는 의존관계가 고정되지 않도록 하고, 런타임 시 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 한다. public class Controller{ private Service service; service.test(); } } 다음과 같이 Controller객체가 Service객체를 사용하고 있는 경우, Controller는 Service에 의존성이 있다고 할 수 있다. 의존한다는 것은 의존대상, 여..

스프링 Service에서 ServiceImpl를 사용하는 이유 ?

스프링 Service에서 ServiceImpl를 사용하는 이유? 대부분의 스프링 프로젝트에서 서비스를 구현할때 Service.java를 인터페이스로 만들고, ServiceImpl 이라는 구현체 클래스를 생성하여 사용한다. 왜 인터페이스와 구현체를 따로 두어 사용할까? ex) MemberService / MemberServiceImpl 1. OOP의 다형성, 개방-폐쇄 원칙 이론상으로는 인터페이스-구현체 패턴으로 설계하는 이유는 인터페이스와 구현체를 분리함으로써 구현체를 독립적으로 두고, 구현체 클래스를 변경하거나 확장해도 이를 사용하는 클라이언트의 코드에 영향을 주지 않도록 하기 위함. 이와 같은 추상화를 통한 구현방식은 객체지향의 특징인 다형성과, 개방-폐쇠원칙(OCP)을 지향하는 설계방식이다. 2.A..

객체지향 프로그래밍 OOP

객체지향 프로그래밍 OOP Object Oriented Programming 객체들의 집합으로 프로그래밍의 상호작용을 표현 데이터를 하나의 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식 설계에 많은 시간이 소요되며 처리 속도가 상대적으로 느리다. 특징 추상화 Abstraction 복잡한 시스템으로부터 핵심개념 또는 기능을 간추려내는것. 캡슐화 Encapculation 객체와 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것. 상속성 Inheritance 상위 클래스의 특성을 하위 클래스가 이어받아 재사용하거나 추가/확장하는 것. 코드의 재사용, 계층 관계 생성, 유지보수 측면에서 중요 다형성 Polomorphism 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것. 대표적으로..

[java script] map() / filter() 함수란? 배열 가공하기.

1. map() 배열의 요소를 순회하려면 for문과 같은 반복문이 필요한데, map() 함수를 쓰면 for문을 쓰지 않고도 배열 전체를 순회하면서 각 요소에 대해 함수를 호출한다. 각 요소는 순서대로 함수를 타고, 함수에 정의된 새로운 형태의 배열로 반환되는 것이다. js에 약한데 실무에서 굉장히 유용하게 쓰게 되어 기록으로 남긴다. map()함수 기본 문법 array.map(callBackFunction(currValue, index, array), newValue); currValue: 원본 배열의 데이터 index : 현재처리중인 인덱스 array : 기존 배열 newValue: callBackFunction에서 사용될 값 ex1) let array = ["월", "화", "수"]; let map ..

Back-end/JavaScript 2022.07.28

싱글톤 패턴이란? singleton pattern

싱글톤 패턴이란? singleton pattern 여러 디자인 패턴 종류 중 하나로, 하나의 클래스에 오직 하나의 객체 인스턴스만 가지는 패턴이다. * 디자인 패턴: 프로그램을 설계할때 발생했던 문제점들을 객체 간 상호관계 등을 통해 해결할 수 있도록 하나의 '규약'형태로 만들어 놓은 것. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 어디에서든 공유하며 접근, 사용할수 있다. 싱글톤 패턴으로 만들어진 클래스는 생성자가 여러번 호출 되더라도, 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 보낸다. 주로 공통된 객체를 여러 개 생성해서 사용하는 DBCP (Database Connection Pool)와 같은 데이터베이스 연결 모듈에 많이 사용..

자바가상머신 JVM 이란?

JVM Java Virtual Machine 자바가상머신은 자바 바이트코드인 .class 파일을 OS에 특화된 코드로 변환하여 실행한다. 바이트코드파일은 운영체제에서 바로 실행할 수 없고, 자바가상머신이라는 번역기가 필요하다. 자바가 JVM을 사용하는 이유는 바이트 코드 파일을 다양한 운영체제에서 수정없이 사용하기 위함이다. 이 특징이 자바를 플랫폼에 종속되지 않고 독립적으로 작동하게 하는 것이다. 단, JVM 자체가 플랫폼에 독립적이지는 않다. 때문에 JVM은 윈도우용, 리눅스용 등 각 운영체제용 JVM이 존재하고 각 운영체제의 JVM이 바이트코드파일은 해당 운영체제에서 실행가능한 기계어로 번역하여 프로그램을 실행하는 것이다. 프로그램이 시작되면 JVM은 OS로부터 프로그램을 수행하는데 필요한 메모리를..

컴파일러compiler와 인터프리터interpreter의 차이? + 자바컴파일러와 자바인터프리터의 역할

컴파일 Compile 코딩을 할때 사용하는 프로그래밍 언어들은 사람이 알아볼 수 있는 인간친화적 언어이다. 컴퓨터는 0과 1로 이루어진 기계어 신호만 알아듣기 때문에 이해할 수 없다. 때문에 우리가 작성한 코드를 컴퓨터에서 실행시키려면 컴퓨터가 알아들을 수 있도록 코드를 기계어로 번역해야한다. 코딩을 마친 후 코드로 짜여진 소스들을 소프트웨어로 실행시키기 전 한방에 미리 번역하는 과정이 '컴파일'이고, 번역역할을 해주는 놈이 컴파일러 이다. 이 컴파일 작업이 요구되는 언어들을 컴파일러 언어라고 한다. 대표적으로 C, C++, 등의 언어가 있다. (Java 는 조금 특이하게 인터프리터도 병행한다. 아래서 살펴보겠다. ) 컴퓨터는 이렇게 컴퓨터의 언어로 번역된 코드를 읽기만 하면 되기 때문에 컴파일러언어는 ..

JUnit Test 자바 단위테스트란? feat. 서비스 단에서 DB연결 테스트해보기.

junit 자바 단위테스트란? Java에서 독립된 단위테스트 (Unit test)를 지원해주는 프레임워크. * 단위테스트란? 특정 소스코드의 모듈이 의도한 대로 작동하는지 검증하는 테스트이다. 즉, 함수 및 메소드에 대한 테스트를 하는 작업. Spring에서 단위테스트를 하는것은 스프링 커네이너에 올라와있는 Bean들을 테스트 하는 것이다. Junit을 사용하면 스프링 컨테이너를 띄워, 그 위에 올라가있는 Bean을 테스트 할 수 있다. JUnit 특징 단정 메서드(assert)로 테스트 케이스의 수행결과를 판별. ex) assertEquals(예상값, 실제값) assert()는 junit의 대표적인 기능이다. 이 메소드를 사용하여 테스트가 정상인지 아닌지 판별한다. Junit 4부터는 테스트 어노테이션..

Tomcat Dymanic Web Module 버전 오류 해결

에러: Maven Java EE Configuration problem -One or more contraints have not been satisfied. -Cannot change version of project facet Dynamic Web Module to x.x *서블릿 스펙에 따라 Dymanic Web Module 버전이 다름 Project > Properties > Project Facets 에서 버전 확인 이클립스 내에서도 여전히 Cannot change version of project facet Dynamic Web Module 에러로 변경 불가하다고 뜨는 경우 파일로 접근해서 수동으로 변경 해 줄 수 있다. 프로젝트 경로 > .settings > org.eclipse.wst.co..