본문 바로가기

개발 관련 지식/JAVA37

람다식에서 클래스 멤버와 로컬 변수 사용 람다식의 실행 블록에서는 클래스 멤버는 제약 사항 없이 사용 가능하지만, 로컬 변수는 제약 사항이 따른다. 클래스 멤버 사용 클래스 멤버인 필드와 메소드를 람다식 실행 블록 안에서 사용하는데에 제약 사항은 없다. 하지만 this를 사용할 때 주의해야한다. 일반적으로 익명 객체 내부에서 this는 익명 객체의 참조이지만, 람다식에서 this는 람다식을 실행한 객체의 참조이다. 다음은 Inner 클래스 내부에서 람다식을 실행했기 때문에 Inner 객체를 참조하는 클래스 멤버 사용 람다식이다. // 인터페이스 ExInterface public interface ExInterface { public void method(); } // this를 사용하는 Use.java public class Use { publ.. 2020. 4. 7.
람다식 람다식은 익명함수를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 람다식의 형태는 매개 변수를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체를 생성한다. Runnable runnable = new Runnable() { // 익명 구현 객체 public void run() {...} }; Runnable runnable = () -> {...}; // 람다식 람다식은 함수 정의 형태를 띠고 있지만 런타임 시에 인터페이스의 익명 구현 객체로 생성된다. 람다식은 인터페이스 변수에 대입된다. 이 말은 람다식은 인터페이스의 익명 구현 객체를 생성한다는 뜻이 된다. 인터페이스는 직접 객체화할 수 없기 때문에 구현 클래스가 필요한데, 람다식은 익명 구현 클래스를 생성하고 객체화한다. .. 2020. 4. 7.
제네릭 타입의 상속과 구현 // Parent.java public class Parent { private kind; private model; public void setKind(T kind) { this.kind = kind; } public void setModel(M model) { this.model = model; } public T getKind() { return kind; } public M getModel() { return model; } } class Tv{} // Child.java public class Child extends Parent { private C company; public void setCompany(C company) { this.company = company; } public C g.. 2020. 4. 6.
제한된 타입 파라미터 숫자를 연산하는 제네렉 메소드는 매개값으로 Number 타입 또는 하위 클래스인 Byte, Short, Integer, Long, Double 의 인스턴스만 가져야 한다. 이것이 제한된 타입 파라미터가 필요한 이유이다. 제한된 타입 파라미터를 사용하려면 타입 파라미터 뒤에 extends로 클래스명이나 인터페이스명을 명시하면 된다. public 리턴타입 메소드(매개변수, ...) {...} 타입 파라미터에 지정되는 구체적인 타입은 상위 타입이거나 상위 타입의 하위 또는 구현 클래스만 가능하다. 주의할 점은 메소드의 중괄호 {} 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 멤버(필드, 메소드)로 제한된다. 다음 제한 타입 파라미터를 적용한 예제이다. // Util.java public clas.. 2020. 4. 6.
제네릭 메소드 제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다. 사용 방법은 리턴 타입 앞에 기호를 추가하고 타입 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다. public Method method(T t) {...} 제네릭 메소드를 호출하는 코드는 두 가지 방법이 있다. 리턴타입 obj = method("string"); // 명시적으로 타입 파라미터를 지정 리턴타입 obj = method("string"); // 타입 파라미터를 추정 코드에서 타입 파라미터를 구체적으로 명시하는 방법과 컴파일러가 매개값을 보고 타입을 추정하도록 하는 방법이 있다. 다음은 제네릭 메소드를 사용하는 예제이다. // Util.java public class Util {.. 2020. 4. 6.
제네릭 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 되었다. 제네릭은 클래스, 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용할 수 있도록 한다. 파라미터는 코드 작성 시 구체적인 타입으로 대체되어 다양한 코드를 생성하도록 해준다. 제네릭은 컴파일 시에 타입을 체크하는데 이것은 실행 시 타입 에러가 나는 것보다 컴파일 시에 미리 타입을 체크해서 에러를 방지하는 것이 좋기 때문이다. 또한 제네릭을 사용하면 타입 변환을 제거한다. // 제네릭을 사용하지 않은 경우. List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // list에 있는 문자열을 가져오기 위해서.. 2020. 4. 6.