본문 바로가기
java

이너 클래스(멤버 로컬 익명)

by improve 2024. 2. 7.
package org.example;

import java.security.PublicKey;

interface Printable{
 public void print();
}
class Papers{
    private String con;

    public Papers(String s) { // 생성자
         con = s;
    }
    public Printable getPrinter(){
        return new Printer();
    }
    private class Printer implements Printable{
        @Override
        public void print() {
            System.out.println(con);
        }

    }
}

public class Main3 {
    public static void main(String[] args) {
        Papers p = new Papers("서류입니다.");
        Printable prn = p.getPrinter();
            prn.print();
    }
}

 

멤버 클래스는 클래스의 정의를 감추어야 할때 유용하게 사용된다.

 

 

package org.example;

import java.security.PublicKey;
import java.util.ArrayList;

interface Printable{
 public void print();
}
class Papers{
    private String con;

    public Papers(String con) { // 생성자
        this.con = con;
    }

    public Printable getPrinter(){ // 로컬 클래스
         class Printer implements Printable{
            @Override
            public void print() {
                System.out.println(con);
            }

        }
        return new Printer();
    }
public Printable getPrinter1() { // 익명 객체
    return new Printable() {
        @Override
        public void print() {
            System.out.println(con);
            }
        };
    }
    public Printable getPrinter2() { // 람다식
       return () ->{
           System.out.println(con);
       };
    }
}

public class Main3 {
    public static void main(String[] args) {
        Papers p = new Papers("서류입니다.");
        Printable prn = p.getPrinter();
        Printable prn1 = p.getPrinter1();
        Printable prn2 = p.getPrinter2();
        prn.print();
        prn1.print();
        prn2.print();
    }
}

 

가면 갈수록 간단 해진다.

 

 

● 익명 클래스   

package org.example;

import java.util.*;

class StrComp implements Comparator<String>{


    @Override
    public int compare(String o1, String o2) {
//        return o2.length() - o1.length(); 내림차순
        return  o1.length() - o2.length(); // 오름차순
    }
}

public class Main4 {
    public static void main(String[] args) {
        List<String> list2 = Arrays.asList("d","aa","sda","dswr","asder");
        list2 = new ArrayList<>(list2);
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("aa");
        list.add("aaa");

        
        // 정렬
        Collections.sort(list,new StrComp());
        StrComp strComp = new StrComp();
//        Collections.sort(list,strComp);
        Collections.sort(list2,strComp);
        //출력 해준다
        System.out.println(list);
        System.out.println(list2);
    }
}

 

 

package org.example;

import java.util.*;

class StrComp implements Comparator<String>{


    @Override
    public int compare(String o1, String o2) {
//        return o2.length() - o1.length(); 내림차순
        return  o1.length() - o2.length(); // 오름차순
    }
}

public class Main4 {
    public static void main(String[] args) {
        List<String> list2 = Arrays.asList("d","aa","sda","dswr","asder");
        list2 = new ArrayList<>(list2);
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("aa");
        list.add("aaa");


//        // 정렬
//        Collections.sort(list,new StrComp());
//        StrComp strComp = new StrComp();
////        Collections.sort(list,strComp);
//        Collections.sort(list2,strComp);
        //출력 해준다

        Comparator<String> comp = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        };

        Collections.sort(list,comp);

        Collections.sort(list,new Comparator<String>() {
                 @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });

//        Collections.sort(list,(o1, o2) -> {return o1.length() - o2.length();});
        Collections.sort(list,(o1, o2) ->  o1.length() - o2.length());
        System.out.println(list);
        System.out.println(list2);
    }
}

 

 

 

 

 

람다식으로도 표현 가능하다

'java' 카테고리의 다른 글

람다와 함수형 인터페이스  (1) 2024.02.08
람다의 방식  (0) 2024.02.07
네스티스(중첩) 클래스  (0) 2024.02.07
어노테이션 사용문법  (0) 2024.02.06
가변인자 선언에 대한 컴파일 처리  (0) 2024.02.06