Java Plus - accidentlywoo/sec GitHub Wiki

더 λ‚˜μ•„κ°€κΈ°

파일과 Overriding, Class class, IO

jar 파일 μ‹€ν–‰μ‹œν‚€κΈ°

  • 폴더ꡬ쑰 : META-INF(μ •λ³΄μ˜ 정보) > MANIFEST.MF λ‚΄μš©

버전 ν‘œμ‹œ 라인

μ§„μž…μ ‘ ν‘œμ‹œ : Main-Class : FQCN(com.my.gui.Horse)

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”© ν•˜κΈ°

  • λΆ€λͺ¨μ˜ λ©”μ†Œλ“œμ™€ λ™μΌν•œ λ¦¬ν„΄νƒ€μž…, λ©”μ†Œλ“œ 이름, λ§€κ°œλ³€μˆ˜ 리슀트λ₯Ό κ°€μ Έμ•Όν•œλ‹€.
  • μ ‘κ·Ό μ œν•œμ„ 더 κ°•ν•˜κ²Œ μ˜€λ²„λΌμ΄λ”© ν•  수 μ—†λ‹€.
  • μƒˆλ‘œμš΄ μ˜ˆμ™Έλ₯Ό throwsν•  수 μ—†λ‹€.

ex)

class P{
  public void m() throws IOException{
  }
}

class C extends P{
  public void m() throws IOException{}
  public void m() throws FileNotFoundException{} // IOException의 ν•˜μœ„ Exception이라 μ‚¬μš©κ°€λŠ₯
  public void m(){}
  // public void m() throws {} //  컴파일 였λ₯˜
  // public void m() throws SQLException{}
}

μ •λ³΄μ œκ³΅μš© 클래슀

JAVA SE

  • Class : 클래슀 정보 ( ν΄λž˜μŠ€μ΄λ¦„, λ©”μ†Œλ“œλ“€, λ©€λ²„ν•„λ“œλ“€)
  • Object : 객체정보 ( hashCode(), toString())
  • File : 파일크기, μ“°κΈ°/읽기 κ°€λŠ₯, μ΅œμ’…μ‚¬μš©μ‹œκ°„

intaceof 와 Class 클래슀

void m(Object o){
  //o.a() Object에 μ—†λŠ” λ©”μ†Œλ“œ 호좜 : 컴파일 였λ₯˜
  if(o instanceof A){ // λ‹€μš΄μΊμŠ€νŒ…μ„ ν•˜κΈ°μ „μ— 클래슀 체크
    A a = (A)o;
    a.a();
  }
}
void m(Object o){
  Class clazz = o.getClass();
  if(clazz.getName().getSimpleName().equals("A")){
    A a = (A)o;
    a.a();
  }
}

λ‘œλ“œνƒ€μž„ λ‹€μ΄λ‚˜λ―Ή λ‘œλ“œ(λŸ°νƒ€μž„μ‹œ 클래슀 λ‘œλ”© μΆ”κ°€λ˜λŠ” λ§ˆλ²•)

java -cp bin A
class A{
  psvm(String[] args){
    syso("hello");
    Class.forName("java.util.Date"); // λŸ°νƒ€μž„μ‹œμ— 클래슀 λ‘œλ”©
  }
}
class DCL{
	public static void test(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		Class claszz = Class.forName(className);
		claszz.newInstance(); // λ§€κ°œλ³€μˆ˜μ—†λŠ” 생성
		// μžλ°”λΉˆμ¦ˆμ˜ 쑰건에 λ§Œμ‘±ν•΄μ•Ό λŸ°νƒ€μž„ λ‹€μ΄λ‚˜λ―Ή λ‘œλ“œλ₯Ό ν•  수 μžˆλ‹€.
		// -> public λ§€κ°œλ³€μˆ˜μ—†λŠ” μƒμ„±μž
	}
}
public class DynamicClassLoad {
	
	public static void main(String[] args) {
		System.out.println("hello");
		Scanner sc = new Scanner(System.in);
		String className = sc.next();
		
		DCL.test(className);
		
	}
}

IO

μžλ°”μ—μ„œ λ°μ΄ν„°λŠ” 슀트림(Stream)을 톡해 μž…μΆœλ ₯λ˜λ―€λ‘œ 슀트림의 νŠΉμ§•μ„ 잘 μ΄ν•΄ν•΄μ•Όν•œλ‹€.

Stream : μˆœμ°¨λ‹¨λ°©ν–₯ 데이터 흐름 : ABC -C-B-A->

java.io μž…μΆœλ ₯ 라이브러리 μ‚¬μš© κ°€λŠ₯.

μž…λ ₯

ν‚€λ³΄λ“œ : Stream - InputStream is = System.in;

파일 : - FileInputStream fis = new FileInputStream("a.txt");

파일 : Reader - FileReader fr = new FileReader("a.txt");

μ†ŒμΌ“ : InputStream is = socket.getInputStream();

ν”„λ‘œμ„ΈμŠ€ : InputStream is = process.getInputStream();


<>InputStream : λ°”μ΄νŠΈλ‹¨μœ„ μž…λ ₯ : 이미지 파일, λ©€ν‹°λ―Έλ””μ–΄, ν…μŠ€νŠΈ 파일 κ°€λŠ₯

<>Reader : λ¬Έμžλ‹¨μœ„ μž…λ ₯

좜λ ₯

int r = is.read();

int r = fis.read();

int r = fr.read();

int r = is.read();

<>OutputStream : λ°”μ΄νŠΈλ‹¨μœ„ 좜λ ₯ 슀트림 - FileOutputStream

<>Writer : λ¬Έμžλ‹¨μœ„ 좜λ ₯ - FileWriter

Reader - Writer : λ¬Έμžλ‹¨μœ„μ˜ μž…λ ₯ -> λ¬Έμžλ‹¨μœ„μ˜ 좜λ ₯

InputStream - OutputStream : λ°”μ΄νŠΈλ‹¨μœ„μ˜ μž…λ ₯ -> λ°”μ΄νŠΈλ‹¨μœ„μ˜ 좜λ ₯

-> μ’…λ₯˜λ₯Ό λ§žμΆ”μ§€ μ•ŠμœΌλ©΄ 문자깨짐 λ°œμƒ

java.io μ£Όμš”ν΄λž˜μŠ€ 체크

DataInputStream / DataOutputStream -> νƒ€μž…λ³„λ‘œ λ‹€μ–‘ν•œ λ©”μ†Œλ“œλ“€μ΄ μ œκ³΅λœλ‹€.

writeInt(65);

문제점 : λ‹€μ–‘ν•œ νƒ€μž…λ³„λ‘œ μž…λ ₯λ˜λŠ” 데이터듀은 좜λ ₯μ‹œ κ·Έ νƒ€μž…κ³Ό μˆœμ„œλ₯Ό μ•Œμ•„μ•Όν•œλ‹€.

-> μœ μ§€λ³΄μˆ˜μ„±μ΄ 떨어지고, λ³΄μ•ˆμƒ μ·¨μ•½ν•˜λ‹€.

ObjectInputStream / ObjectOutputStream

λŒ€ν‘œ λ©”μ†Œλ“œ

writeObject(dt);
readObject();
  1. 객체의 ν•„λ“œ(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)
  2. 직렬화
  3. 솑신

--->

  1. μˆ˜μ‹ 
  2. 역직렬화

ObjectInputStream의 readObject λ©”μ†Œλ“œμ˜ λ™μž‘

readObject(); // ClassNotFoundException dt = new Date();
  1. Date 클래슀 찾기
  2. JVM이 λ‘œλ“œ
  3. λ°”μ΄νŠΈμ½”λ“œ 검증
  4. μΈν„°ν”„λ¦¬νŠΈ

-> Class clazz = Class.forName("Date");

클래슀 νƒ€μž…μ˜ 객체생성

-> clazz.newInstance();

κ°μ²΄μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ₯Ό 채움 : setter

ν™œμš©? : λΆ„μ‚°μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•œλ‹€!

RMI(Romote Method Invocation)

BufferedInputStream / BufferedOutputStream

InputStream is = System.in; //-> ν‘œμ€€ μž…λ ₯μ‹œμŠ€ν…œμ€ InputStream νƒ€μž…

InputStreamReader isr = new InputStreamReader(is); // μžλ°”μ—λ§Œ μžˆλŠ” μ°©ν•œ 녀석 Byte -> Char

BufferedReader br = new BufferendReader(isr); //(ν•œμ€„ μž…λ ₯은 BufferedReader 밖에 μ—†λ‹Ή!)

String line = br.readLine();

--κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ν•œ 것이 λ°”λ‘œ Scanner!

Scanner sc - new Scanner(System.in);
sc.nextLine();

Java SE μ •λ³΄μš© 클래슀

  • Object
  • Class
  • File
⚠️ **GitHub.com Fallback** ⚠️