본문 바로가기

개발 관련 부가 지식/자바, 스프링

(12)
자바 (함수형 프로그래밍) 람다식 자바는 객체 지향 프로그래밍을 지원한다. 하지만 간단한 기능을 수행하는데 객체지향으로는 너무 번거로워서 자바 8부터는 함수형 프로그래밍을 지원하게 되고 이를 람다식이라 부른다 비교 👀 비교할 기능 (해당 interface를 통해 비교해보자) public interface Add { public int add(int x, int y); } 1. 객체 지향 프로그래밍에서 기능 수행 절차 1-1 클래스 생성, 구현할 기능을 가진 메소드 정의 public class AddImpl implements Add{ @Override public int add(int x, int y) { return x+y; } } 1-2 해당 클래스 객체를 생성 ,객체가 가진메소드를 실행 public class TestAdd { pu..
Cannot find symbol 해결해야 할 때 // 문제 상황 ❗ 자바8 스프링 프로젝트 마이그레이션 중 문제가 생겼다. (스프링 3, 이클립스 -> 스프링5, 인텔리제이 + gradle) build 시에 sun.security.~~~ 패키지 관련하여 cannot find symbol이 발생한 것이 그 문제이다. // 문제점 파악 👀 그럼 이클립스에서는 build가 왜 문제가 없었을까? 마이그레이션 전,후의 차이는 다음과 같다. 이클립스는 Java 용 Eclipse Compiler (ECJ) 라고 자체 컴파일러를 사용한다고 한다. 인텔리제이는 프로젝트에 적용한 JDK가 갖고있는 javac 컴파일러를 통해 컴파일을 한다고 한다. 내가 적용한 JDK8 javac 컴파일러는 해당 sun 패키지를 지원하지 않아서 빌드가 되지 않았던 것이다. // 해결 방안..
Java ArrayList 구현 자바의 Array는 다른 언어와는 달리 크기를 넣어서 생성하게 되어있다. (따라서 한번 생성하고 나면 크기가 정해짐🤷‍♂️) ArrayList 는? 자바가 제공해주는 라이브러리로, 데이터 추가에 따라 배열의 크기가 늘어난다. ✔ Doubling이란? ArrayList가 배열이 다 차게 되면 배열을 2배로 늘리고, 기존 데이터를 복사해 오는데 이러한 작업을 더블링이라고 한다. 참고✨ ArrayList 는 입력 시간, 검색 시간이 O(1) 이다. ArrayList를 java로 구현해 보았다. public class MyArrayList { private Object[] data; //배열의 object private int size; //배열의 사이즈 private int index; //다음 데이터를 추가..
스프링 Race Condition 해결 방안 레이스 컨디션 해결방안 1. 메소드 선언 부에 synchronized 적용 사용방법 -> public synchronized void decrease(~~) 주의점 ! 메소드에 Transactional 적용되어 있으면 안됌, Transactional 이 있으면 클래스를 프록시로 만들어 decrease 메소드 위 아래로 트랜젹서널을 적용하는데 decrease 후 트랜잭셔널 닫히기 전 사이에 다른 스레드가 접근 가능해짐 , 또한 서버 1대가 아니라 2대 이상일 경우에도 단일 스레드가 보장되지 않는다. 2. Pessimistic Lock 서버 1이 락을 걸고 데이터를 가져가면 다른 서버는 데이터를 가져갈 수 없다. 데이터는 락을 가진 서버만 접근하다. Low나 Table 단위로 락을 걸 수 있음 사용방법 @L..
Java Queue 구현 Queue은? FIFO(Firs-In First-Out) 형태의 자료 구조 ✔ Queue 자료 구조 java로 구현해 보았다. -> MyNode라는 객체를 가지고 로직 구현을 함, MyNode는 입력데이터와 다음 MyNode의 주소 값을 가지고 있음 -> MyNode를 MyQueue 안에 정의하는 이유는 MyNode 의 private 필드를 접근하기 위함 ✔ Queue의 메소드 👀 ->add() : 맨 끝에다 데이터 추가 ->remove() : 맨 앞 데이터 꺼냄 ->peek() : 맨 앞 데이터 보는 것 ->isEmtpy() : Queue가 비었는지 확인 public class MyQueue { class MyNode { private T data; private MyNode next; public M..
spring.jpa.open-in-view 란? 스프링 부트로 프로젝트로 만들고 실행을 시키면, WARN 이 하나 나온다. (spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explictily configure spring.jpa.open-in-view to disable this warning) application.properties에서 spring.jpa.open-in-view=false 로 하면 경고문은 사라지는데 그럼 여기서 open-in-view 설정은 뭐를 의미할까? (open-in-view의 기본 설정은 true) open-in-view 란? open-in-view는 JPA에서 영속..
자바 객체 타입은 불변으로, 비교 방법 (공유참조, 값 복사) 자바의 객체타입과 기본타입에 = 연산 시 다른점을 정리해보고자 한다. 🤔 // 기본타입 자바의 기본타입(primitive type) 종류 byte: 8비트의 정수 타입 short: 16비트의 정수 타입 int: 32비트의 정수 타입 long: 64비트의 정수 타입 float: 32비트의 부동 소수점 타입 double: 64비트의 부동 소수점 타입 char: 16비트의 유니코드 문자 타입 boolean: 논리 타입 -> 자바 기본 타입은 = 연산 시 값이 복사가 된다. int a= 10; int b = a; b = 4 // b 값을 바꿔도 a는 10 유지 따라서, 기본타입은 값이 복사되어 서로 영향을 받지 않는다. // 객체 타입 - 문제 파악 이제 객체타입을 보자. public class Main { p..
스프링 JPA 사용, 프록시 entity 확인 메소드 스프링 JPA 사용 시에 조회한 Entity 가 프록시인지, 초기화 됬는지 확인하는 메소드 정리 👀 EntityManagerFactory emf = Persistence.createEntityManagerFactory("name"); 프록시 초기화 여부 확인 emf.PersistenceUnitUtil.isLoaded(Objedct Entity) , ture false 로 나옴 프록시 클래스 확인 방법 entity.getClass() 출력 , javasist or HibernateProxy 나옴 프록시 강제 초기화 org.hibernate.Hibernate.initialize(entity) 👏

728x90
반응형