개발

    [스프링] DI (Dependency Injection)

    스프링 DI 스프링 DI 방식 생성자 주입 말 그대로 생성자를 이용하여 의존 관계를 주입하는 방법 생성자를 통해 주입하기 때문에 해당 객체 생성시 한번의 호출이 보장된다. @Service public class UserImpl implements UserService{ private UserRepository userRepository; @Autowired public UserImpl(UserRepository userRepository){ this.userRepository = userRepository; } } 수정자 주입 메소드를 통해 객체를 주입하는 방식을 사용한다. 생성자 주입과는 달리 주입받는 객체가 변결될 가능성이 있는 경우 사용한다. (실제로 변경하는 경우는 드믈다.) @Service pu..

    [Java] static과 final의 차이가 뭘까?(feat. JVM 메모리)

    [Java] static과 final의 차이가 뭘까?(feat. JVM 메모리)

    Static static은 고정된 이라는 뜻이다. 메모리를 공유하여 사용하기 때문에 필요할때 바로바로 호출하거나 데이터를 가져올 수 있게 된다. 즉, 객체 생성없이 사용할 수 있는 필드와 메소드를 생성하고자 할 때 활용한다. 공용데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할 때 이용한다. Final final은 최종적인 이라는 의미이다. 즉, 해당 변수는 값이 저장되면 최종적인 값이 되므로, 수정이 불가능하다는 의미이다. 주로 상수로 변수를 사용하기 위해 사용하거나 오버라이딩을 막기 위해 사용한다. 만약 클래스에 final을 사용하면 상속을 막아준다. 따라서 변수, 함수, 클래스의 명시적 제한을 나타내기 위해 사용하며, 이를 통해 다양한 팀 협업시 코드의 가독성을 높여주는 효과..

    JAVA의 스레드를 공부하자

    JAVA의 스레드를 공부하자

    프로세스와 스레드의 차이 프로세스(공장) : 실행중인 프로그램이란 뜻이다. OS로 부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 모든 프로세스는 하나 이상의 스레드를 가진다. 스레드(일꾼) : 프로세스 내부에서 작업을 수행하는 것이다. 호출스택만 있다면 무한정 만들어 낼 수 있다. 멀티 태스킹 : 여러개의 프로세스를 동시에 수행한다. cpu의 코어의 개수와 일치한다. 멀티 스레딩 : 하나의 프로세스에 여러개의 스레드를 수행한다. *스레드를 생성하는 것보다 프로세스를 생성하는데 더 자원(시간,공간)이 필요하다. *멀티 스레드는 하나의 프로세스(할당된 공간)에서 자원을 같이 사용하기 때문에 동기화,교착상태와 같은 문제들이 발생할 수 있다. 쓰레드의 구현과 실행 Thread 클래스 상속 (다른 클래스 ..

    [TDD] 자바와 JUnit을 활용한 실용주의 단위 테스트 (작성중)

    자바 유닛 단위 테스트 단위 테스트시 빠르게 코드를 점검할 수 있다 테스트클래스의 이름은 테스트할 클래스 이름 앞이 test를 붙여서 명명한다 asserThat으로 해당 값이 맞는지 판단한다 TDD 개발을 위해서 악의적인 테스트 실패코드를 작성해야한다 대부분의 단언은 실제 값과 비교한다 테스트 코드일 경우에는 try/catch보다는 예외를 던지는 방식으로 코딩해라 태스트 코드를 AAA방식으로 일관성 유지한다.(준비 실행 단언) 추가적으로 사후 단계도 필요하다(할당했던 자원 정리) 단위테스트는 개별 메소드 테스트가 아니라 클래스의 종합적인 동작을 테스트 해야한다 코드구조는 테스트를 별도의 디렉토리로 분리하지만 같은 패키지에 넣는다. 메이븐에서도 이를 권장함. 코드의 작은 변화가 수많은 테스트 코드를 깨트린..

    [JUnit5] JUnit5를 공부해보자(Spring Boot, REST API)

    자바 개발자의 93%가 사용하는 단위 테스트 프레임워크. 스프링 부트 2.2버전 이상 부터는 기본적으로 제공됨. JUnit5 모듈 Platform : 테스트를 실행해주는 런처 제공. TestEngine API 제공 Jupiter : JUnit5를 지원하는 TestEngine API구현체 Vintage : JUnit4와 3를 지원하는 TestEngine 구현체 (*작성한 버전에 따라 Jupiter를 사용하거나 Vintage를 사용한다.) Annotation 사용법 @Test 테스트라는 것을 나타내는 어노테이션 // JUnit4 @Test(expected = Exception.class) void create() throws Exception {} // JUnit5 @Test void create(){} @..

    JAVA의 Servlet이 뭐지?

    자바를 MVC패턴을 공부하면서 분명 서블릿서블릿 했는데 무슨 말인지 와닿지 않았다. 그래서 도대체 이게 무엇인가, 언젠가는 공부를 해야지 하고 다짐하고 넘어갔다. 오늘 드디어 서블릿을 뿌시는 기회가 왔다. 그래서 공부를 해보자. 우선 다양한 기관과 사람들의 정의를 보자 자바 서블릿은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다. (위키백과) A servlet is a Java programming language class that is used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Alth..

    JAVA 인터페이스는 왜 쓰는 걸까?

    Spring Boot를 공부하다 보면 상속개념을 자주 사용하게 되었다. 물론 강의를 들으면서 따라치다보니 깊은 고민없이 그냥 이렇게 동작하는구나 하고 이해했었다. 그러다 복습을 하던 와중에 인터페이스를 쓰는 걸지 궁금 해졌다. typescript에서는 interface가 자료형을 공유하여 협업에 도움을 주기 위함이던데 JAVA는 무엇때문에 쓰는걸까싶었다. 인터페이스의 사전적 정의는 아래와 같다. 서로 다른 두 개의 시스템, 장치사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 이게 무슨 말인가 싶다. 그럼 자바에서 인터페이스가 먼지 살펴보자 자바에서 인터페이스란 일종의 추상 클래스이다. 인터페이스는 추상클래스처럼 추상메서드와 상수를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 ..

    OOP(Object-Oriented Programming, 객체 지향 프로그래밍)이 머냐?

    객체란 무엇인가? 현실의 무언가를 표현한것이다. 즉, 현실의 개념에 대응하는게 객체이다.객체는 협력(여러 객체가 함께 참여함), 책임(객체의 역할을 잘 수행해야함), 역할(객체 마다 자신의 역할을 가짐)을 수행하며 문제를 해결한다.현실의 사물과 달리 능동적이고 자율적인 존재이다. 객체는 메시지를 통해 다른 객체에 책임을 다하라고 요구한다. 메세지를 보내는 객체는 무엇을 할지 요구하고, 어떻게 하는지는 신경쓰지 않는다. 객체는 책임을 수행하라고 요구받지만, 어떻게 처리할 지는 자율에 맡긴다. 왜냐하면 서로 다른 유형의 객체가 동일한 메세지에 대해 다르게 반응하게 하기 위함이다. 다형성을 활용하여 하나의 객체가 다양한 타입을 가질 수 있게 한다. (*다형성 : 하나의 객체가 여러가지 타입을 가질 수 있는 것..