[중]오름,내림차순/properties/다른폴더에 컴파일하기

서울IT코드정리 /kyChoi·2021년 10월 31일
0

중급

목록 보기
1/2

comparable은 compareTo 메소드 를 오버라이딩해서 하나의 객체를 받는다.
내 주소에 있는 값과 가져온 값을 비교해서 오름, 내림 차순으로 정리할 수 있따.

comparator는 compare 로 두가지 값을 가지고 와서 비교 할 수 있다.
int compare(Integer n1, Integer n2){return n1-n2;}

import java.util.*;

class A{
	public static void main(String args[]){
    	Set<Person> set = new TreeSet<Person>();
        set.add(new Person(25));
        set.add(new Person(15));
        set.add(new Person(35));
        System.out.println(set);// 15 25 35
    }
}
class Person implements Comparable<Person>{
	int age;
    Person(int a) {age = a;}
    public String toString(){return age+"";}
	public int compareTo(Person anotherPerson){
    	return age-anotherPerson.age;
    }
}

toString 을 호출하는 메소드가 없는데, 실행되는 이유는, 컴파일 할때 jdk가 toString() 을 호출하기 때문입니다 그니깐, System.out.println(set.toString()); 에서 호출해서 주소값이, 문자열로 바뀝니다.
age+""; 공백 없는 쌍 다옴표는 문자열로 만들어 줍니다~

import java.util.*;

class A{
	public static void main(String args[]){
	
	Set<Integer> set = new TreeSet<Integer>(new DC());
	set.add(100);
	set.add(99);
	set.add(87);
	System.out.println(set);
	
}
}
class DC implements Comparator<Integer>{
	public int compare(Integer n1, Integer n2){return n2-n1;}
}

Person로직은 직접 만든거고, 있는 자료형으로 비교하는건 Comparator 와 compare 메소드를 사용하면 되는데, 얘를 호출한적 없는데 실행되네??
TreeSet에 new DC()가 들어 단 뒤, 내림 차순이 되었다 왜지? 왜냐면 해당 클래스를
호출하면 인터페이스로부터 상속받은 메소드가 실행됩니다 -> 클래스를 호출하지 않았따면 오름, 내림차순이 달라질 수 있어요

프로퍼티스 키=패키지+클래스명

map 과 for문으로 자동처리를 해줍니다

패키지+클래스명에 로직을 넣습니다

클래스명을 알고 있으니 Class.forName().newInstance로 해당 클래스의 객체를 생성합니다.

Properties 는 많이 사용됩니다

map의 일종/ 파일은 hdd에 저장되어 있고/ 사용하려면 메모리에 올려야 합니다(map.put)

import java.util.*;
import java.io.*;

class A{
	public static void main(String args[]){
	Properties p =new Properties();  //객체생성
	p.load(new FileInputStream("c:/java/cmd.properties")) //파일 읽어오기, 기본생성자 없음
	String str = p.getProperty("abc");
	System.out.println(str); //key 값을 넣고 100이라는 값을 출력
}
}


import java.util.*;
import java.io.*;

class A{
	public static void main(String args[])throws Exception{
	Properties p =new Properties();  //객체생성
	p.load(new FileInputStream("c:/java/cmd.properties")); //파일 읽어오기, 기본생성자 없음
	Set<String> set = p.stringPropertyNames();
	System.out.println(set);// 프로펄티스에 있는 키갑만 출력하게 합니다
}
}
c 드라이버 java - test 에 src 와 bin 폴더가 있습니다. 

src 폴더에 AddAction.java 파일을 만듭니다
안에 로직은 다음과 같습니다. 
package a.b; //컴파일 할 파일 안에 패키지들을 만들어요~
public class AddAction{
	public String toString(){return "추가";}

}

cmd 창에서 bin 폴더에 저장합니다

javac -d test/bin test/src/AddAction.java

src 폴더에  RemoveAction.java 도 만들어요
package c.d;
public class RemoveAction{
	public String toString(){return "삭제";}

}

test1.java 의 로직은







import java.util.*;
import java.io.*;

class A{
	public static void main(String args[])throws Exception{
	Properties p =new Properties();  //객체생성
	p.load(new FileInputStream("c:/java/cmd.properties")); //파일 읽어오기, 기본생성자 없음
	
	Map<String,Object> map = new HashMap<>();
	
	for(String key : p.stringPropertyNames()){//키가 있는 수 만큼 돌려요
		String className = p.getProperty(key) //키를 주고 값을 반환해서, 패키지명+클래스명을 받았어요
		Object obj = Class.forName(className).newInstance();//클래스 이름을 알면 객체 생성 할 수 있어요, 객체를 생성해서 메모리에 올리려는 거에요~ 이름을 메모리에 올리려는게 아니에요~
		map.put(key,obj);이제 맵으로 key 와 AddAction을 메모리에 올렸습니다

	}
	System.out.println(map.get("add")); 
   System.out.println(map.get("remove")); 
   // 이제 클래스 객체가 메모리에 올라 갔기때문에 클라스 이름인AddAction이 아니라 AddAction 의 주소값이 나옵니다~ 
   근데 해당 로직에는 toString 메소드가 잇어 JDK가 콤파일 할때 호출해서 return 값을 반환 합니다
}
}
만약 cmd 가 경로를 찾지 못한다면 

set classpath=.;c:/java/bin 처럼 경로를 직접 지정해 줍니다~

profile
건물주가 되는 그날까지

0개의 댓글