JAVA (10) 썸네일형 리스트형 Anonymous class vs lambda 1. Anonymous class 특징 inner class가 outer class의 참조값을 가지고 있는 것처럼, 익명 클래스의 인스턴스는 외부 클래스 인스턴스의 참조값을 가지고 있다. GC의 대상이 되고 익명 클래스 참조가 해제될 때, 외부 클래스 인스턴스의 참조도 같이 해제가 된다. 2. Anonymous class 단점 위의 특징 때문에 불필요한 메모리를 참조하여 메모리릭이 발생할 확률이 올라간다. 3. lambda 특징 static field를 생성하여 작업을 진행하여 외부 클래스의 인스턴스의 참조값을 가지지 않는다. 그래서 메모리가 할당이 되고 작업이 끝나면 GC 대상이 되어 메모리 참조가 바로 해제가 된다. 4. lambda 장점 위의 특징 덕분에 불필요한 메모리를 참조하지 않아 메모리릭이 .. final final이라는 키워드가 변경 불가능을 의미한다. 1. final class 상속할 수 없다. 2. final method 오버라이딩 할 수 없다. 3. final value 상수 : immutable(불변) static 1. static 특징 반드시 메모리(data 영역)에 올라간다. GC 대상이 아니다. : 바로 이점을 활용해야 static 사용에 큰 이점을 얻을 수 있다. 그래서 여러 개의 인스턴스(객체)를 만들더라도 그 스태틱 영역은 같은 주소에 존재하는 값을 참조한다. 이때, 같은 JVM에서만 해당된다. 만약 다른 JVM에서 생성된 static 변수는 다른 주소나 다른 값을 참조한다. 자주 사용하고 절대 변하지 않는 변수는 static final을 사용하면 GC 대상이 되지 않아 성능상 이점이 있다. 설정 파일 정보도 static으로 관리하면 좋다. 왜냐하면 클래스의 객체를 생성할 때 마다 설정 파일을 로딩하면 엄청난 성능 저하가 발생한다. 2. JVM 간의 상이한 결과가 나오는 것을 방지하기 위한 해결책 mem.. nested class(중첩 클래스) 1. 사용하는 이유 코드를 간단하게 표현하기 위함. 2. static nested class 하나의 관심사에 해당하는 내용을 하나의 단위로 묶기 위해 사용 당연히 내부 클래스에 접근 가능. 대표적인 예로 builder class가 있다. public class Outer { private int id; private String name; public Outer(Builder builder) { this.id = builder.id; this.name = builder.name; } public static class Builder { private int id; private String name; public Builder id(int id) { this.id = id; return this; } p.. 절차지향과 객체지향의 차이점 절차지향은 순차처리, 즉, 로직의 실행 순서가 중요하다. 객체지향은 오브젝트 중심으로 개발하는 것을 의미한다. 여기에서 객체 간 전달하는 메시지를 잘 정의하는 것이 진정한 객체지향의 핵심이다. 잘 정의한다는 의미는 결합도가 낮고, 재사용성을 가지고, 확장성 있게 메시지를 전달하는 것을 의미한다. nested class 1. static nested class 하나의 관심사에 해당하는 내용을 하나의 단위로 묶기 위해 사용 당연히 내부 클래스에 접근 가능. public class StaticNested { static class Nest { public void n() { System.out.println("static"); } } public static void main(String[] args) { // 외부 클래스를 컴파일하면 내부 스태틱 클래스도 자동으로 컴파일된다. // 접근 방법. StaticNested.Nest nest = new StaticNested.Nest(); nest.n(); } } 2. inner class 내부 구현을 감추고 싶을 때 당연히 내부 클래스에 접근 불가능. (1) local inne.. 상속 부모 클래스를 자식 클래스에서 재사용할 수 있는 것을 의미. 예약어 extends 자식 클래스에서 super 예약어로 부모 사용 가능 오버라이딩가능. 오버로딩도 가능하지만 부모 클래스에 없는 메서드이므로, 다형성 사용불가. 자식 타입으로만 접근 가능. ex) public class As { public void a() { System.out.println("a"); } } public class Bs extends As { @Override public void a() { System.out.println("bb"); super.a(); } public void a(int a){ System.out.println(a); } public static void main(String[] args) { As a.. interface와 abstract 차이점 1. interface interface는 메서드를 정의만 하고 구현은 하지 않는다.(설계) 그래서 하위 클래스에서 implements란 예약어를 사용한다. 필드는 상수만 가능. 2. abstract abstract는 메서드를 정의도 할 수 있지만, 실제 내용을 구현도 할 수 있다. 그래서 하위 클래스에서 extends라는 예약어를 사용한다. 인터페이스처럼 정의하려면 메소드 앞에 abstract를 붙여줘야한다.(0개 이상) 객체화 불가능 필드 정의 및 값 지정 가능 이전 1 2 다음