본문 바로가기

분류 전체보기100

익명 객체 익명 객체는 이름이 없는 객체를 말한다. 익명 객체는 단독으로 생성할 수 없다. 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다. 익명 객체는 필드의 초기값이나 로컬변수의 초기값, 매개 변수의 매개값으로 주로 대입된다. 익명 자식 객체 생성 우선 부모 클래스를 자식 클래스에 상속하고 선언한 후, new 연산자를 이용해서 자식 객체를 생성해서 필드나 로컬 변수에 대입하는 것이 기본이다. class Child extends Parent { } class A { Parent p = new Child(); void method() { Parent localVar = new Child(); } } 하지만 자식 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용할 경우라면 익명 자식 .. 2020. 4. 8.
정적 멤버와 static static은 '고정된' 이라는 의미를 갖고 있다. 정적 멤버는 클래스에 고정된 필드와 메소드를 의미한다. 정적 멤버는 객체에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 객체를 생성하지 않고 클래스를 통해서 호출한다. 정적 멤버는 static을 붙여주면 된다. 인스턴스 멤버로 사용할 것인지 정적 멤버로 사용할 것인지. 판단 기준은 객체 마다 가지고 있어야 할 데이터라면 인스턴스 멤버로, 객체 마다 가지고 있을 필요가 없으면 정적 멤버로 선언하는 것이 좋다. 즉, 변하지 않는 공용적인 데이터는 정적 멤버로 선언하는 것이 좋다. 근데 정적 멤버를 객체를 생성해서 객체 참조 변수로 호출하는 것도 가능하긴 하다. 다만 경고 표시가 나타난다. // Calculator.java public class C.. 2020. 4. 8.
인스턴스 멤버와 this 인스턴스 멤버란 객체를 생성한 후 사용할 수 있는 필드와 메소드. 즉, 객체 없이는 사용할 수 없는 필드와 메소드가 인스턴스 멤버 클래스 내부(객체 내부)에서 인스턴스 멤버에 접근하기 위해서 this를 사용할 수 있다. 주로 생성자나 메소드의 매개변수 이름이 필드와 같을 때 this을 사용해서 객체 내부의 필드임을 명시한다. public class Car { // 필드 String model; int speed; // 생성자 Car(String model) { this.model = model; } // 메소드 void setSpeed(int speed) { this.speed = speed; } void run() { for(int i = 0 ; i 2020. 4. 8.
람다식 메소드 참조 메소드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 불필요한 매개 변수를 제거하는 것이 목적이다. (left, right) -> Math.max(left, right); // 를 매개변수를 제거해서 참조하는 것으로 바꾸면 Math :: max; // 로 바꿀 수 있다. 정적 메소드 참조 클래스 이름 :: 메소드 Class :: method; 인스턴스 메소드 참조 먼저 객체를 생성하고, 객체를 참조하는 변수 :: 메소드 Class class = new Class(); class :: method; 정적 메소드와 인스턴스 메소드 참조 예시 // Calculator.java public class Calculator { public static int staticM(int x, int y.. 2020. 4. 7.
람다식에서 클래스 멤버와 로컬 변수 사용 람다식의 실행 블록에서는 클래스 멤버는 제약 사항 없이 사용 가능하지만, 로컬 변수는 제약 사항이 따른다. 클래스 멤버 사용 클래스 멤버인 필드와 메소드를 람다식 실행 블록 안에서 사용하는데에 제약 사항은 없다. 하지만 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.