본문 바로가기

Programming Language29

[JAVA & Kotlin] Java 메모리 구조 (JVM Memory Structure) JVM JVM(Java Virtual Machine)은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해서 반드시 실행되어야 하는 소프트웨어 입니다. 자바 프로그램을 실행시키는 것은 JVM을 실행시키고 그 위에서 자바 프로그램을 실행시킨다는 의미입니다. 즉 JVM은 운영체제(OS)와 자바 프로그램 사이를 연결해주는 중계자 역할을 합니다. 자바 코드를 컴파일하여 .class 바이트 코드(.class 파일은 바이트 코드라고 하는데 사람이 쓰는 자바 코드에서 컴퓨터 읽는 기계어의 중간 단계라고 할 수 있습니다)로 만들면 이 코드가 자바 가상 머신 환경에서 실행됩니다. 이러한 특징으로 인해 자바 프로그램에서 오류가 발생해도 JVM만 다운될 뿐 전체 시스템에 데미지를 주지 않습니다. 또한 JVM 덕분에 플랫폼에.. 2022. 9. 14.
[JPA] 테스트 코드 실행 후 데이터 rollback 설정하기 상황 CRUD (데이터 저장/조회/수정/삭제) 로직을 구현한 후 JUnit을 이용하여 테스트 코드를 작성하는 경우 @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; } @Repository public class MemberRepository { @PersistenceContext private EntityManager em; public Long save(Member member) { em.persist(member); return member.getId(); } public Member find(Long id) { return em.find(Member.cla.. 2022. 8. 15.
[Spring] 스프링 빈(Bean) 빈(Bean) Spring IoC 컨테이너가 관리하는 자바 객체 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아님 ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈 즉 Spring에서 빈은 ApplicationContext가 알고 있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고 있는 객체를 의미 어떻게 Spring IoC 컨테이너에 빈을 등록할까? 빈을 만드는 방법은 다양하지만 기본적으로 2가지 방법이 있음 Component Scanning 빈 설정 파일에 직접 빈을 등록 Component Scan @ComponentScan 애노테이션과 @Component 애노테이션을 사용해서 빈을 등록핟록 하는 방법 @ComponentScan 애노.. 2022. 5. 31.
[JPA] 영속성 컨텍스트란 JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); // 엔티티를 DB가 아니라 영속성 컨텍스트에 저장 엔티티 매니저? 영속성 컨텍스트? 영속성 컨텍스트는 논리적인 개념 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) 영속성 컨텍스트에 관리되는 상태 준영속 (detached) 영속성 컨텍스트에 저장.. 2021. 10. 22.
[Spring] 스프링 주요 어노테이션 정리 @RestController 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어줍니다.' @GetMapping HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 줍니다. 예전에는 @RequestMapping(method = RequestMethod.GET)으로 사용되었습니다. @RunWith(SpringRunner.class) 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다. 여기서는 SpringRunner라는 스프링 실행자를 사용합니다. 즉 스프링부트 테스트와 JUnit 사이에 연결자 역할을 합니다. @WebMvcTest 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션 입니다. @Autowired 스프링이.. 2021. 9. 13.
[Java] 리팩토링 할 때 고려할 사항들 리팩토링이란? 리팩토링이란 유지보수 생산성 향상을 위해 기능을 변경하지 않고 소스코드를 수정, 보완하는 소프틍웨어 품질 향상 기법이다. 리팩토링의 목적 리팩토링의 목적은 유지보수성 향상, 유연한 시스템, 생산성 향상, 소프트웨어 품질 향상 등이 있다. 리팩토링할 때 고려할 사항들 메소드가 너무 길지 않은가? 코드를 읽기 쉬운가? 내가 작성한 코드를 내가 읽기 어렵다면 남들에겐 훨씬 어렵다. 코드가 적절한 위치에 있는가? 객체들 사이의 의존 관계 책임이 너무 많지는 않은지? 2021. 5. 30.
[Java] 람다식 람다식 (Lambda expression) JDK 1.8 부터 추가 람다식의 도입으로 인해 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 람다식 덕분에 함수형 언어의 장점들을 자바에서도 누릴 수 있게되었다. 람다식이란? 람다식은 메서드를 하나의 식(expression)으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 익명 함수(anonymous function)이라고도 한다. 모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야 하고, 객체도 생성해야만 비로소 이 메서드를 호출할 수 있다. 그러나 람다식은 이 모든 과정없이 오직 람다식 자체만으로도 이 메서드의 역할을 대신할 수 있다. 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, .. 2019. 6. 13.
[Java] Enum 클래스 열거체(enumeration type) JDK 1.5부터는 C언어의 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있음 열거체의 장점 열거체를 비교할 때 실제 값 뿐만 아니라 타입까지도 체크함 열거체의 상수값이 재정의 되더라도 다시 컴파일할 필요가 없음 열거체의 정의 및 사용 자바에서는 enum 키워드를 사용하여 열거체를 정의할 수 있음 enum 열거체이름 { 상수1이름, 상수2이름, ... } enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } 이렇게 정의된 열거체는 다음처럼 사용함 열거체이름.상수이름 Rainbow.RED 열거체의 상수값 정의 및 추가 열거체의 첫번째 상수값은 0부터 설정되며, 그다음은 바로.. 2019. 4. 18.
[Java] 스트림 API 스트림 API Java SE 8부터 추가된 스트림 API는 입력과 출력의 스트림과는 전혀 다른 개념 자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용함 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 새로운 코드를 작성 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근해야만 했음 이러한 문제점을 극복하기 위해서 Java SE 8부터 스트림(stream) API를 도입함 스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있음 스트림 API의 특징 스트림은 외.. 2019. 4. 16.
[Java] 람다 표현식 람다 표현식(lambda expression) 람다 표현식이란 메소드를 하나의 식으로 표현한 것 int min(int x, int y) { return x x x < y ? x : y; 익명 클래스 new Object() { int min(int x, int y) { return x < y ? x : y; } } 람다 표현식은 메소드.. 2019. 4. 15.