Laguage
[Java] ArchUnit 아키텍처 테스트에 대해 알아보자
아키텍처 테스트 소개 개발 공부를 하면서 단위 테스트 통합 테스트 등에 대한 내용들은 익숙해졌다. 위에서 말한 2가지 테스트 외에도 속성 테스트와 아키텍처 테스트 등 여러 테스트가 존재하는데 오늘은 아키텍처 테스트에 대한 내용과 패키지 종속성 검사와 클래스 종속성 검사에 대한 테스트를 알아볼 것입니다. 나머지 deep 한 내용들은 하단에 reference 링크가 있으니 관련 테스트를 할 시에 참조하여 살펴봅시다. 아키텍처란 건축학이라는 뜻을 가지며 소프트웨어에선 시스템의 구성을 뜻합니다. 이러한 뜻을 보며 아키텍처 테스트를 생각해보면 “패키지 구조와 클래스 간의 관계 등을 테스트해 볼 수 있을 것이다”라고 예측할 수 있습니다. 아키텍처 테스트의 목적은 아키텍처의 패키지, 클래스, 레이어, 슬라이스 간의 ..
[JAVA] JVM 구조
학습 내용 JVM 구조 이해 특징 하드웨어 및 운영체제 독립성 컴파일 된 코드의 작은 크기 보안 런타임에 다양한 메모리 영역 조작 클래스 로더 컴파일 된 바이트 코드를 읽어와 메모리 영역에 배치 영역 구분 로딩 클래스 파일을 읽음 class, interface, enum, 메서드, 변수 를 메서드 ( Method ) 영역에 저장. 로딩이 끝난 후 해당 타입의 객체를 Class 객체로 생성하여 힙 ( Heap ) 영역에 저장. 링크 클래스나 인터페이스를 JVM 으로 연결 후 실행 초기화 staic 값을 초기화 및 변수 할당 메모리 영역 구분 Thread 에서 자원 공유 스택 Thread 마다 Runtime Stack 을 만들고 Stack Frame 을 push 한다. Stack Trace pc ( Prog..
[JAVA] 스레드 ( Thread )
스레드를 알아보기 전에 동기식 처리 방식과 비동기식 처리 방식을 알아야합니다. 생각 정리 동기식 처리 방식 프로세스 하나가 끝야 다음 프로세스로 넘어가는 것이 동기식 처리 방식이다. 제조업에서 조립공정1 이 끝나야 다음 조립공정2로 넘어가는 것으로 비유하면 좋겠네요. 문제점은 조립공정1의 공정 시간이 오래 걸릴수록 다음공정이 계속 대기한다는 것이 문제점입니다. 그러므로 완조립체가 늦게 나오는 문제점이 생길 수 있겠죠? 동기식 처리 방식 예제 코드 1부터 100까지 출력해주는 예제 코드이다. 자식 메서드 2개를 만들고 메인 프로세스를 1개를 만들어 찍어보자. print1 이 먼저 처리가 되고 다음 print2 , main 순서대로 처리가 끝나면 다음 순서를 처리 할 것이다. 결과는 생략.. 비동기식 처리 ..
[JAVA] Optional
학습내용 Optional 을 왜 사용하는가?? Optional 사용법 1. 우리는 Optional 을 왜 사용하는가?? Book 이라는 domain 이 있습니다. Book 의 name 이 null 일 때 무엇일 일어날까? NullPoint Exception 이라는 Error 가 출력 될 것인데 이 부분의 에러를 잡으려면 조건문으로 null 이 들어오지 않게 코드를 작성했을겁니다. 이런식으로 null 조건을 만들어 감싸줍니다. 하지만 Otional 을 사용한다면 null 체크를 위한 조건문을 만들지 않아도 되고 Otional로 감싸주어 null 을 예방할 수 있습니다. 객체가 null 이면 터지겠죠? Optional 이라는 케이스, 컨테이너?? 껍질?? 로 감싸서 null 이 터지는걸 보호합니다. 정리 단..
[JAVA] @애노테이션 ( Annotation )
학습 내용 애노테이션 정의 방법 표준 애노테이션 메타 애노테이션 애노테이션 정의 방법 interface 앞에 @를 붙여 주면 애노테이션을 정의 할 수 있습니다. 하지만 지금 생성한 애노테이션은 아무런 정보가 없는 빈 껍데기 일 뿐 입니다. 여기서 정보를 더 추가 해봅시다, 디폴트 값으로 애노테이션 안에 값을 지정을 할 수도 있고 애노테이션을 사용하고 그 값을 정의 할 수도 있습니다. 표준 애노테이션 @Override -> 부모에게 상속 받은 기능들을 사용 할 때 사용하는 애노테이션입니다. 메서드 이름이 부모의 메서드 이름과 달라지면 컴파일 시 에러가 발생됩니다. @Deprecated -> 필드의 멤버나 메서드 중에 우리가 사용하지 않는 것들을 삭제하지 않고 이 애노테이션을 사용하여 더 이상 사용하지 않을..
[JAVA] 열거형 ( enums )
열거형 ( enums ) 서로 관련된 상수를 편리하게 정의 하기 위한 것으로 기능이 추가 되었고, JDK 1.5 부터 기능이 추가 되었습니다. 기존의 열거 패턴과 문제점 기존에 상수를 정의하는 방법은 이와 같다. 카드의 무늬와 숫자 2가지 타입의 상수들을 정의 해놓고 같은 값들을 비교해보면 같다고 나온다. 결과는 맞지만 의미상으로 타입이 다르므로 다르다 라는 결과가 나와야만 한다. 타입을 다르게 하여 상수를 정의 하였는데 비교 해보면 같은 값이 나온다라는 타입의 불안정한 코드라 문제점을 알아 볼 수 있습니다. Enum 사용 타입을 정의하여 생성해줍니다. 기존의 코드보다 더욱 간결해진 것을 볼 수 있고 타입 체크를 컴파일 시에 확인 할 수 있고 런타임 실행 전에 에러를 미리 예방을 할 수 있습니다. 컴파일..
[java] 객체지향 프로그래밍 설계 원칙 - SOLID
이번 글은 SOLID 원칙에 대해 적어 보겠습니다. 제가 이해한 내용이 맞지 않다면 피드백 부탁드립니다. SOLID 란 무슨 단어 일까? 객체지향 프로그래밍에서의 5대 설계 원칙이 있습니다. 단어 부터 살펴보겠습니다. SRP ( 단일 책임 원칙 : Single Responsibility Principle ) OCP ( 개방 폐쇄 원칙 : Open Close Principle ) LSP ( 리스코브 치환 원칙 : The Liskov Substitution Principle ) ISP ( 인터페이스 분리 원칙 : Interface Segregation Principle ) DIP ( 의존성 역전 원칙 : Dependency Inversion Principle ) 위의 5가지로 정의 되어 있습니다.. 순서대로..
[java] 객체지향 프로그래밍 설계 원칙 - 결합도 / 응집도
이번 글은 객체지향 프로그래밍 설계 원칙을 공부하면서 제가 생각을 한 내용을 정리 해보려고 합니다. 내용이 부족하고 틀린 부분이 있으면 피드백 부탁드립니다. 설계 원칙의 포인트 결합도는 낮추고 응집도는 높여라 결합도를 낮춰라! 이 글이 아주 많이 보였을 것인데 처음에는 무슨 말인지 이해가 안갔습니다. 결합도는 낮추고 응집도는 높여라?? 뭐야?? 이게?? 참 어렵네요... 비유를 하면서 이해하는 방법 밖에 없을 것 같습니다. 조립 부품 A, B, C 가 있다고 가정해 봅시다. 우리는 완제품을 생산 하기 위해 A 라는 부품과 B 라는 부품이 필요합니다. 이로서 완제품은 A 부품과 B 부품의 의존성을 가지게 된다는 것인데 이것이 바로 결합도라고 생각합니다. 그러면 결합도를 낮춘다는 것이 무슨 뜻 일까?? 라는..
Java DTO 관련 정리...
데이터를 담아 이동할 때 객체를 이용해라! DTO 라 부르는데 (Data Transfer Object) 예제코드를 보자. 자바 bean 이라고도 부르는데 오로지 이 클래스는 데이터의 이동할때만 쓰이는 정보만 담고 있다. 아래 코드는 DTO를 사용하여 객체의 이동을 담당하였다.
[java] 객체지향의 특징 개념부터!!
객체지향의 특징 4가지 캡슐화 상속 다형성 추상화 1. 캡슐화 캡슐화가 무엇일까?? 필자는 캡슐화를 생각하면 뽑기가 생각납니다. 뽑기에서 장난감이 캡슐안에 있는 것을 보았을텐데요! 이 캡슐을 목적은 필자가 생각하기에 물리충격에 의해 파손을 막고 변질될 우려가 있으므로 보호 차원에서 캡슐을 사용한 것 같습니다. 자 그러면 자바의 캡슐화의 개념을 살펴볼까요?? 자바에서의 캡슐화는 클래스가 캡슐이고 내용물이 변수와 함수(메서드)이다. 즉, 외부에서 쉽게 접근하지 못하도록 하는 것과 은닉하는 것이 핵심이다!! 예제 코드 public class MemberVo { // 멤버들이 전부 private private String name; private int age; private String tel; private..