Java

java

java의 동작 원리 및 구조 [JVM의 구조]

자바의 특징 - 객체지향언어: 하지만, 요새 대부분 언어가 객체지향언어( 이제 자바만의 특징이 아니다) - 람다식: 함수형 프로그래밍의 원천 - Stream API: 람다 표현식과 메서드 참조등의 기능과 결합해서 복잡하고 어려운 데이터 처리 작업을 쉽게 조회, 필터링, 변환하여 처리가능. -병렬 프로그래밍: 여러 CPU코어에서 쓰레드를 배분하여 동시에 작업 수행가능. JDK: 자바를 사용할 때 필요한 프로그램 (ex: word를 설치해야 문서 작성 가능. ) openjdk, amazon Corretto, 등등. 자바 컴파일러 자바 컴파일러는 자바를 가지고 작성한 자바 코드를 자바 가상머신(JVM)이 이해할 수 있는 자바 바이트코드로 변환하는 역할을 수행한다. '.java' 파일을 '.class' 파일로 ..

java

[effective java] 생성자에 매개변수가 많다면 빌더를 고려하자

빌더 패턴 정적 팩터리와 생성자에 선택적 매개변수가 많을 때 고려할 수 있는 방안 대안1: 점층적 생성자 패턴 또는 생성자 체이닝 • 매개변수가 늘어나면 클라이언트 코드를 작성하거나 읽기 어렵다. public class A{ int a; int b; int c; A(int a,int b) {}; //필요한 필드만 주입하여 생성하는 경우가 있다. A(int b){};//3개 필드 ->최대 2^3==8개의 생성자가 생성된다. ............ } 대안2: 자바빈즈 패턴 (기본 생성자로 생성 후, setter를 통해 필요한 의존관계를 주입) • 완전한 객체를 만들려면 메서드를 여러번 호출해야 한다. (일관성이 무너진 상 태가 될 수도 있다.) ex) A객체는 a,b,c 객체를 주입받아야 사용될 수 있는데..

java

[java] 체크, 언체크 예외에 대한 분석과 잘못된 오해

우선 글을 시작하기에 앞서, java의 checked/unchecked 예외가 적힌 아래의 표를 보자. 위의 표를 보고 "뭐야, 다 아는 내용이잖아?" 라는 생각이 들었다면, 그것은 잘못 공부한 것이다. 위의 표에서는 "예외 발생 시 트랜잭션 처리" 라는 부분이 잘못되었다. 온전히 "자바"의 관점에서만 본다면, rollback 여부와 예외의 종류는 전혀 무관하고, rollback을 할지, 말지는 우리가 정하는 거다. 이러한 오해의 기원은 Spring의 DB 트랜잭션 처리에 있다. Spring DB 트랜잭션 처리 chkecked 예외: 복구 가능성이 존재하기에 try catch로 잡아서 따로 복구로 직을 수행하도록하고 롤백하지 않는 것이 보통이다. unchecked 예외: 복구할 가능성이 없거나 적은 di..

java

[이펙티브 자바] 정적 팩토리 메소드

정적 팩토리 메소드 정적 팩토리 메서드란 객체 생성의 역할을 하는 클래스 메서드 이다. 정적(static) 이란? 고정적이기에 인스턴스를 생성하지 않아도 사용할 수 있다. 정적 메소드: 인스턴스를 생성하지 않아도, 호출 메소드를 만들 수 있다. final과 헷갈릴 수 있는데, final은 "최종적인", 즉 한번 값이 할당되면 "불변" 이라는 특성을 가지게 해준다. 추가적으로, 전역 변수와 정적 변수의 차이점이 헷갈리는 경우가 많아, 둘의 차이점을 정리해보겠다. Global VS Static 1) 전역(global) 변수는 다른 파일에서도 가져다 쓸수 있지만 정적(static) 변수는 해당 파일의 scope안에서만 접근이 가능하다. 2) 초기화 하지 않은 정적(static) 변수의 경우 본문에서 사용하지 ..

java

[이펙티브 자바] ENUM

열거 타입(ENUM) 상수 목록을 담을 수 있는 데이터 타입. • 특정한 변수가 가질 수 있는 값을 제한할 수 있다. 타입-세이프티 (Type-Safety)를 보장할 수 있다. (코드의 안정성 향상) • ENUM을 사용하면 가독성이 올라간다.( int 통해 0: 실패, 1: 성공 보다 Status.FAIL, Status.SUCCESS와 같이 의미를 담을 수 있다.) • 싱글톤 패턴을 구현할 때 사용하기도 한다. 타입 세이프티 보장 만약 int로 다음과 같이 status를 구분한다 생각해보자 0-> 주문 실패 1-> 주문 완료 ..... int status; .... if(status==0)//주문 실패 로직 수행 if(status==1)//주문 성공 로직 수행 status는 int 로 선언되었기에 사실상..

Spring boot

스프링 핵심원리 3 [스프링 디자인 패턴]

https://codenme.tistory.com/105 스프링 핵심원리-고급편 2 [쓰레드 로컬을 통한 동시성 문제해결] https://codenme.tistory.com/104 스프링 핵심원리-고급편 1 [예제 생성 및 요구사항 이해] https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8/dashboard 스프링 핵 codenme.tistory.com 위 글에 이어지는 내용입니다. 템플릿 메서드 패턴 where: 쓰레드 로컬로 동시성 문제 해결 로그 추적기에서 여전히 남은 문제점- Controller에서 로직과 관련없는, 로그 코드..

Spring boot

[spring 데이터 접근 핵심 원리 6] 자바 예외의 이해

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard 스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의 백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., - 강의 www.inflearn.com 김영한님의 위 강의를 바탕으로 작성하였습니다. 예외 계층 스프링이 제공하는 예외 추상화를 이해하기 위해서는 먼저 자바 기본 예외에 대한 이해가 필요하다. 예외는 자바 언어의 기본 문법에 들어가기 때문에 대부분 아는 내용일 것이다. 예외의 기본 내용을 간단히 복습하고, 실무에 필요한 체..

Spring boot

[JPA] Part 6 (객체지향 쿼리 언어 pt.2)

*김영한님의 JPA 기본편을 기반으로 작성하였습니다. jpql 경로 표현식 미리 보는 결론: "묵시적 join 사용하지말고 전부 명시하자!" ( 복잡한 db에서 묵시적 join이 발생 시, 인과관계 파악이 어려워진다. ) 상태 필드(state field): 경로 탐색의 끝, 탐색X ex) m.username. -> username이 마지막, 더 내려갈 수 없다. 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O select m.team from Member m; -> Member와 Team을 join 한 뒤, select(projection) 으로 team을 가져온다(묵시적 join 발생). 이와 같은 묵시적 join이 발생 되지 않게 주의하자. 컬렉션 값 연관 경로: 묵시적 내..

코앤미
'Java' 태그의 글 목록