Language/Java 50

인터페이스 기본 메소드와 스태틱 메소드

기본 메서드 (Default Methods) 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있다. 기본 메소드는 구현체가 모르게 추가된 기능으로 그만큼 리스크가 있다 컴파일 에러는 아니지만 구현체에 따라 런타임 에러가 발생할 수 있다. 반드시 문서화 할 것. (@implSpec 태그 사용) /** * @IimplSpec * getName()으로 가져온 문자열을 대문자로 바꿔 출력 */ public interface Foo { void printName(); default void printNameUpperCase(){ System.out.println (getName().toUpperCase()); } String getNa..

Language/Java 2022.06.19

메소드 레퍼런스

메소드 레퍼런스란? 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현 즉, 람다식을 더 간결하게 표현하는 방법이 메소드 레퍼런스 이다. 메소드 참조하는 방법 스태틱 메소드 참조 타입::스태틱 메소드 특정 객체의 인스턴스 메소드 참조 객체 레퍼런스::인스턴스 메소드 임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드 생성자 참조 타입::new 메소드 또는 생성자의 매개변수로람다의 입력값을 받는다 리턴값 또는 생성한 객체는 람다의 리턴값 이다. 예제 코드 import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.functi..

Language/Java 2022.06.18

함수형 인터페이스와 람다 표현식

람다 (인자 리스트) -> { 바디 } // 인자 -> 바디 Function plus10 = (i) -> i + 10; 인자 리스트 인자가 없을때 : () 인자가 한개일 때: (one) 또는 one 인자가 여러개 일 때 : (one, two) 인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다. (Integer one, Integer two) 바디 화상표 오른쪽에 함수 본문을 정의한다. 여러 줄인 경우에 {}를 사용해서 묶는다 함 줄인 경우에 생략 가능, return도 생략 가능 import java.util.function.BinaryOperator; import java.util.function.Supplier; public class Foo { public static v..

Language/Java 2022.06.18

자바에서 제공하는 함수형 인터페이스

Function T타입을 받아서 R타입을 리턴하는 함수 인터페이스 사용 방법 1 public class Plus10 implements Function { @Override public Integer apply(Integer integer) { return integer + 10; } } public class Foo { public static void main(String[] args) { Plus10 plus10 = new Plus10 (); System.out.println (plus10.apply ( 1 )); } } 사용 방법 2 import java.util.function.Function; public class Foo { public static void main(String[] args..

Language/Java 2022.06.18

함수형 인터페이스와 람다 표현식 소개

함수형 인터페이스 인터페이스 안에 추상 메소드가 하나만 있는것을 말한다. 함수형 인터페이스를 사용하고 싶으면 @FunctionalInterface 어노테이션을 사용하면 된다. @FunctionalInaterface는 자바에서 지원하기 때문에 import 할 필요가 없고 @FunctionalInaterface을 안써도 사용이 가능하지만 함수형 인터페이스인걸 알리기 위해 사용해주는것이 좋다 @FunctionalInterface을 사용하면 추상 메소드가 2개 이상일시 @FunctionalInterface에 에러 표시가 나타난다. static,default 사용하여 다른 메소드를 사용이 가능하다 @FunctionalInterface public interface RunSomething { void doIt();..

Language/Java 2022.06.15

java8과 java11 차이점

자바8 인터페이스에서 디폴트 메소드와 정적 메소드를 포함 디폴트 메소드는 하위 구현 클래스에서 재정의가 가능하지만, 정적 메소드는 구현 클래스에서 재정의할 수 없다. interface TestInterface { default String logic() { return "test"; } static String logic2() { return "test2"; } } 람다 표현식 람다식은 메소드를 하나의 식으로 표현한 것을 말한다. 그리고 람다식은 함수의 이름이 없기 때문에 익명 함수라고 부르며, 메소드의 매개 변수로 전달되거나 메소드의 결과로 반환될 수 있는 특징이 있어서 함수를 변수로 다룰 수 있다는 장점이 있다. 람다식은 메소드를 식으로 나타낸 것이긴 하지만, 엄밀히 말하면 이 메소드를 가진 객체를 ..

Language/Java 2022.05.08

클래스 로더 시스템

JVM 구조에서도 말했듯이 클래스 로더 시스템은 3개로 나누어서 볼 수 있다고 말했다. 거기에 대한 내용을 좀 더 자세하게 정리해보자. 로딩(loading) 클래스 로더가. class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메서드" 영역에 저장 이때 메소드 영역에 저장하는 데이터 FQCN, 클래스, 인터페이스, 이늄, 메서드와 변수가 있다 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙"영역에 저장된다. 링크(Linking) 레퍼런스를 연결하는 과정이다. 링크에서도 3가지로 나눌 수가 있다. 검증 : 바이트코드 검증 기는 생성된 자바 바이트코드가 적절한지 아닌지에 대해서 검증하며 검증이 실패할 경우 검증 오류를 보낸다. 준비 : 모든 정적 변수의 메모리가 할당되며..

Language/Java 2022.05.05

JVM 구조

JVM은 자바 가상 머신(Java Virtual Machine)의 약자이다. JVM은 자바 소스코드로부터 만들어지는 자바 바이너리 파일(. class)을 실행할 수 있다. 또한 JVM은 플랫폼에 의존적이다. 즉 리눅스의 JVM과 윈도우즈의 JVM은 다르다. 단, 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다. 클래스 로더 시스템 이란? class에서 바이트코드를 읽고 메모리에 적절하게 배치하는 것이 클래스 로더 시스템가 하는 일이다. 여기서 클래스 로더 시스템이 크게 3가지로 나누어 볼 수가 있는데 로딩, 링크, 초기화 이다. 로딩(loading) : class에서 바이트코드를 읽어오는 과정이다. 링크(Linking) : 레퍼런스를 연결하는 과정이다. 링크에서도 3가지로 나눌 수가 있다. ..

Language/Java 2022.05.05

네이버 페이 (Naver Pay) 기능구현

이번에 간편결제 기능인 네이버 페이 구현을 진행했으며 작업이 모두 끝나서 이를 정리해두려 한다. 네이버페이 결제 연동 개발 네이버페이 간편결제 연동 개발은 크게 3가지로 이루어진다. 결제창 호출 -> 결제 승인 -> 결제 완료 NaverPay.html 네이버 페이는 javaScriptSDK를 제공 하고 있다. SDK를 이용하여 결제창을 쉽게 띄울 수 있다. NaverPay.html 설명 NaverPay javascript object 를 통해 프로그래밍할 수 있도록 지원한다. var oPay = Naver.Pay.create(); Naver.Pay.create({sdk parameter object}) 네이버페이 객체를 생성한다. var oPay = Naver.Pay.create({ "mode" : "d..

Language/Java 2022.04.24

카카오 페이( Kakao pay) 기능구현

이번에 간편결제 기능인 카카오 페이 구현을 진행했으며 작업이 모두 끝나서 이를 정리해두려 한다. 준비하기 관리자 모드 > 환경설정 > 전자결제 설정 > 국내 전자 결제에서 PG를 신청하면서 동시에 카카오페이를 신청할 수 있다. 이미 PG사에 가입하신 분은 간편결제 항목에서 카카오페이 신청 버튼을 눌러 안내에 따라 진행하면 된다. 카카오 페이 API 에서는 아래 항목의 기능을 제공한다. 이 중에 이번에 필요한 건 단건결제 였다. 단건결제: 일회성으로 결제를 진행합니다. 정기결제: 최초 등록 후 주기적으로 결제를 진행합니다. 정기결제 비활성화: 등록된 정기결제 키(SID)를 비활성화 하여 정기결제를 중지합니다. 정기결제 상태 조회: 등록된 정기결제 키 (SID)를 조회해 정기결제 상태를 조회합니다. 주문 조..

Language/Java 2022.04.23