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 로 선언되었기에 사실상..

코앤미
'java' 카테고리의 글 목록