default 인터페이스, 메소드

default 메소드 강제성이 없다.

인터페이스에 선언할 때 { } 몸통이 있음

클래스에 인터페이스에 추가할 때 좋음

기존 코드에 추가 할 때 용이

 

인터페이스

package exam0615;

// default 메소드

public interface TestInterface {
	void method();
	
	default void method2() { // default 메소드 강제성이 없다.
		System.out.println("method2");
	}
}


실행

package exam0615;

public class TestEx {

	public static void main(String[] args) {
		MyInterface mi = new MyClassB();
		mi.method2();
		

	}

}
<결과>
MyInterface-method2

 

 

인터페이스

package exam0615;

public interface MyInterface {
	void method1();
	
	default void method2() {
		System.out.println("MyInterface-method2");
	}
}


구현 객체 1

package exam0615;

public class MyClassA implements MyInterface {

	@Override
	public void method1() {
		System.out.println("MyClassA-method1");
		
	}

}


구현 객체 2
package exam0615;

public class MyClassB implements MyInterface {

	@Override
	public void method1() {
		System.out.println("method1");
		
	}

	
}

 

default 인터페이스, 메소드 ( 람다식 )

인터페이스 

package exam0615_2;

@FunctionalInterface// 인터페이스에 추상메소드 한개만 사용 가능 ( 람다식 개념 ) 
// default 인터페이스 가능

public interface MyInterface {
	void method();
//	void aaa();
}


실행

package exam0615_2;

public class MyInterfaceEx {

	public static void main(String[] args) {
		MyInterface my = new MyInterface() {
			
			@Override
			public void method() {
				System.out.println("my");
				
			}
		};
		my.method();
		
		// 람다식
		my = () -> {System.out.println("my1");};
		my.method();
		
		my = () -> {System.out.println("my2");};
		my.method();
	}

}
<결과>
my
my1
my2

 

인터페이스, 메소드 ( 람다식 )

인터페이스

package exam0615_2;

public interface MyInterface2 {
	int method(int x, int y);

}


실행

package exam0615_2;

public class MyInterfaceEx2 {

	public static void main(String[] args) {
		MyInterface2 my3 = new MyInterface2() {
			
			@Override
			public int method(int x, int y) {
				System.out.println(x+y);
				return x+y;
			}
		};
		
		MyInterface2 my2 = (x,y) -> {
			System.out.println(x+y);
		return x+y;
		};
		
		
		
		my3.method(3, 4);
		my2.method(5, 6);
		
		int res = my3.method(20, 30);
		System.out.println(res);
		
		MyInterface2 my4 = (a, b) -> {return a+b;};
		res = my4.method(100, 200);
		System.out.println(res);
		
	}

}
<결과>
7
11
50
50
300

 

예외 직접 만들기 => 처리

예외 상속 ( 예외 만들기 ) 

package exam0615_3;

// 예외 상속
public class TestException extends Exception {
	public TestException(String msg) {
		super(msg);
	}
}


예외 처리

package exam0615_3;

// 예외 처리 
public class Test {
	private int x;

	public int getX() {
		return x;
	}

	public void setX(int x) throws TestException {
		if(x < 0) {
			throw new TestException("x는 0보다 커야 합니다.");// 예외 생성 (예외 메세지 작성)
		}
		
		this.x = x;
	}
	
	
}


실행

package exam0615_3;

public class TestEx {

	public static void main(String[] args) {
		Test test = new Test();
		try {
			test.setX(-100);
		} catch (TestException e) {// 만든 예외 
			// TODO Auto-generated catch block
//			e.printStackTrace();
			System.out.println(e.getMessage());// 예외 메세지 출력
		}
		//작성 했던 예외 메세지 나옴
		//exam0615_3.TestException: x는 0보다 커야 합니다.
//		at chap10/exam0615_3.Test.setX(Test.java:13)
//		at chap10/exam0615_3.TestEx.main(TestEx.java:8)


	}

}
<결과>
x는 0보다 커야 합니다.

 

배열 예외 처리

선언 및 실행

package exam0615_4;

public class TryEx {

	public static void main(String[] args) {
		String[] strArray = {"10","2a"};
		int value = 0;
		for(int i=0; i<=2; i++) {
			try {
				value = Integer.parseInt(strArray[i]);
				
			} catch (ArrayIndexOutOfBoundsException e) {
				System.out.println("인덱스를 초과했음");
			}catch (NumberFormatException e) {
				System.out.println("숫자로 변화할 수 없음");
			} finally {
				System.out.println(value);
			}
			
		}

	}

}
<결과>
10
숫자로 변화할 수 없음
10
인덱스를 초과했음
10

 

배열 예외

선언 및 실행

package sec01.exam01;

public class ArrayEx {

	public static void main(String[] args) {
		
		//ArrayIndexOutOfBoundsException 에러

		
		if(args.length != 2) {
			System.out.println("매개 값이 부족 합니다.");
			System.exit(0);
		}
		
		String data = args[0];
		String data1 = args[1];

		
		System.out.println(args.length);
		System.out.println("args[0] : " + data);
		System.out.println("args[1] : " + data1);
		

	}

}
<결과>
2
args[0] : 10
args[1] : 20

 

Number 예외 

package sec01.exam01;

public class NumberFormatEx {

	public static void main(String[] args) {
		
		// int로 변경 가능
		String data1 = "100";
		int var1 = Integer.parseInt(data1);
		System.out.println(var1);
		
		// 에러 int로 변경 불가
		String data2 = "100as";
		int var2 = Integer.parseInt(data2);
		System.out.println(var1);
//		NumberFormatException 예외 발생
	}

}

 

Null 예외 

package sec01.exam01;


public class NullEx {
	//실행 예외
	public static void main(String[] args) {
		// 컴파일러가 오류 잡음
//		String data = null;
//		System.out.println(data.toString());
		//NullPointerException 예외 발생
		
		
		String data2 = null;
		System.out.println(data2.toString());
		//NullPointerException 예외 발생
		
		// 값이 null인지 비교 
		String data3 = null;
		if(data3 != null) {
			System.out.println(data3.toString());
		}else {
			System.out.println("값이 null이 아님");
		}
		//NullPointerException 예외 발생
	
		
	}

}

 

 

Class 예외 

package sec01.exam02;

class Animal{} // 부모
class Dog extends Animal{}// 자식
class Cat extends Animal{}// 자식
public class ClassCastEx {
	
	//매개변수가 부모타입
	public static void changeDog(Animal animal) {
//		Dog dog = (Dog) animal; // 강제 형변환

		if(animal instanceof Dog) {
			Dog dog = (Dog) animal;
		}else {
			System.out.println("안됩니다.");
		}
	}
	
	public static void main(String[] args) {
		Dog dog = new Dog();
		Cat cat = new Cat();
		
		// 가능
		changeDog(dog);
		
		//ClassCastException 에러 
//		changeDog(cat);

	}

}

 

예외 떠넘기기 throws

package sec01.exam03;

public class ThrowsEx {
	// 예외 떠넘기기
	public static void findClass() throws ClassNotFoundException {
		Class.forName("shdg.fnjgs.dghj");
	}
	
//	public static void main(String[] args) throws ClassNotFoundException {
//		findClass();
//		// ClassNotFoundException: 에러
//		System.out.println("여기");
//	}
	
	public static void main(String[] args) {
		try {
			findClass();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// ClassNotFoundException: 에러
		System.out.println("여기");
	}
	
}

 

배열 다중 catch

package sec01.exam03;

public class TryCatchFinallyRuntimeEx {
	// 다중 catch
	public static void main(String[] args) {
		String data1 = null;
		String data2 = null;
		try {
			data1 = args[0];
			data2 = args[1];
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			System.out.println(value1 + "+" + value2 + "=" + result);
		} catch (ArrayIndexOutOfBoundsException e) {// <= 배열 예외 생겼을때 처리
			System.out.println("실행 매개값의 수가 부족합니다.");
		} catch (NumberFormatException e) {// <= 문자열로 되어 있는 데이터를 숫자로 변경할때 예외 처리
			e.printStackTrace();
			System.out.println("숫자로 변화할 수 없습니다.");
		}finally {// <= 항상 실행
			System.out.println("다시 실행 하세요.");
		}
	}

}
<결과>
90+80=170
다시 실행 하세요.

 

try, catch 예외 처리 코드 basic

package sec01.exam03;

public class TryEx {
	//try, catch 예외 처리 코드 basic
	public static void main(String[] args) {
		try {
			Class.forName("java.leng.String2");// 해당 파일 존재하지 않음
		} catch (ClassNotFoundException e) { // <= 해당 위치에 오류코드 넣기
			e.printStackTrace();// 오류 코드 확인
			System.out.println("클래스가 존재하지 않습니다.");
			//System.out.println(e.getMessage());
			// TODO Auto-generated catch block
//			e.printStackTrace();
		}
		

	}

}
<실행>
java.lang.ClassNotFoundException: java.leng.String2
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:375)
	at chap10/sec01.exam03.TryEx.main(TryEx.java:7)
클래스가 존재하지 않습니다.

 

기본 API 클래스

java.lang 패키지

java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있는 패키지이다.

패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.

 

 

자바 API 도큐먼트

API ( Aplication Programming Interface )는 API 라이브러리라고 부르기도 하는데, 프로그램 개발에 자주 사용

되는 클래스 및 인터페이스 모음을 말한다.

https://docs.oracle.com/en/java/javase/ 해당 URL에서 버전별로 볼 수 있다.

 

 

 

Object 클래스

객체 비교(equals())

Object 클래스 비교 

package sec01.exam01;

public class Ex01 {

	public static void main(String[] args) {
		Object obj1 = new Object();
		Object obj2 = new Object();
		
		boolean result1 = obj1.equals(obj2);
//		System.out.println(result1); // false
		
		boolean result2 = (obj1 == obj2);
		System.out.println(result2); // false
	}

}

 

 

객체 동등 비교 ( 선언 )

package sec01.exam01;

public class Member {
	String id;

	
	public Member(String id) {
		this.id = id;
	}

	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Member) { // 매개값이 Member 타입인지 확인
			Member member = (Member) obj;
			if (id.equals(member.id)) {
				return true;
			}
		}
		return false;
	}
	
}


객체 동등 비교 ( 실행 )

package sec01.exam01;

public class MemberEx {

	public static void main(String[] args) {
		Member obj1 = new Member("blue");
		Member obj2 = new Member("blue");
		Member obj3 = new Member("red");
		if(obj1.equals(obj2)) {
			System.out.println("obj1와 obj2는 같다.");
		}else {
			System.out.println("obj1와 obj2는 틀리다.");
		}

	}

}
<결과>
obj1와 obj2는 같다.

 

package sec01.exam01;

public class SString {

	public static void main(String[] args) {
//		String str1 = new String("test");
//		String str2 = new String("test");
//		if(str1 == str2) {
//			System.out.println("같다");
//		}else {
//			System.out.println("다르다");
//		} // 결과 : 다르다.
		
		String str1 = new String("test");
		String str2 = new String("test");
		if(str1.equals(str2)) {
			System.out.println("같다");
		}else {
			System.out.println("다르다");
		} // 결과 : 같다.

	}

}

 

객체 해시코드

객체 해시코드란 객체를 식별하는 하나의 정수값을 말한다. 객체의 메모리 번지를 이용해서 해시코드를 만들어 

리턴하기 때문에 객체마다 다른 값을 가지고 있다. 

선언

package sec01.exam01;

import java.util.Objects;

//해쉬코드
public class Key {
	int number;
	public Key(int number) {
		this.number = number;
	}
	// 1 번
//	@Override // 해쉬 코드 재정의
//	public int hashCode() {
//		return number;// 
//		// 해쉬값을 int값으로 바꿔줌
//	}
	
	// 2번
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Key) {
			Key c = (Key) obj;
			if(this.number == c.number) {
				return true;
			}
		}
		return false;
	}
	// 2번
	public int hashCode() {
		return number;
	}

	
}


호출
package sec01.exam01;

import java.util.HashMap;

public class KeyEx {

	public static void main(String[] args) {
		// 1번
//		Key key1 = new Key(100);
//		Key key2 = new Key(100);
//		System.out.println(key1.hashCode());
//		System.out.println(key2.hashCode());
		
		// 2번
		HashMap< Key, String > hashmap = new HashMap<Key, String>();
		hashmap.put(new Key(1), "홍길동");
		String name = hashmap.get(new Key(1));
		System.out.println(name);

	}

}

 

HashMap

package sec01.exam01;

import java.util.HashMap;

public class HashMapEx {

	public static void main(String[] args) {
		//제네릭 <Integer(키값), String(출력물)>
		HashMap<Integer, String> map = new HashMap<>();
		map.put(1, "한국");// put 값 넣기
		map.put(2, "미국");
		map.put(3, "일본");
		String val = map.get(2);// get 값 출력
		System.out.println(val);// get(2) 미국 출력
		

	}

}
<결과>
미국

 

제네릭

선언

package sec01.exam01;
// 제네릭
public class NewBox<T> {
	private T t;

	public T get() {
		return t;
	}

	public void set(T t) {
		this.t = t;
	}
	
}


실행

package sec01.exam01;

public class NewBoxEx {

	public static void main(String[] args) {
//		<클래스> 클래스만 가능
		
		NewBox<String> newBox = new NewBox<String>();
		newBox.set("홍길동");
		String name = newBox.get();
		System.out.println(name);
		
		NewBox<Apple> newBox2 = new NewBox<Apple>();
		newBox2.set(new Apple());
		Apple apple = newBox2.get();
		System.out.println(apple);
		
		NewBox<Integer> a3 = new NewBox<Integer>();
		a3.set(100);
		int res = a3.get();
		System.out.println(res);

	}

}
<결과>
홍길동
sec01.exam01.Apple@1e643faf
100

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

JDBC_설정(MariaDB, 이클립스)  (1) 2023.06.17
2023-06-16 21일차  (0) 2023.06.16
2023-06-14 19일차  (0) 2023.06.14
2023-06-13 18일차  (0) 2023.06.13
2023-06-12 17일차  (1) 2023.06.12

+ Recent posts