본문 바로가기
Backend/JAVA

JAVA instanceof 연산자

by YERIEL_염주둥 2020. 4. 29.
728x90

두 변수가 같은지 비교 할 수 있는 연산자 : 클래스 명만 같은지 비교

package kr.or.ksmart;

class MemberDto{
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	@Override
	public int hashCode() {
		final int prime = 31; //주소값
		int result = 1;
		result = prime * result + ((age == null) ? 0 : age.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode()); // 해쉬코드가 들어가있는데 연산을 함
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MemberDto other = (MemberDto) obj; //객체도 비교하면서 object도 비교함
		if (age == null) {
			if (other.age != null)
				return false;
		} else if (!age.equals(other.age))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}

class MemberDto2{
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
}

public class JavaBasic01 {
	public static void main(String[] args) {
		
		/**
		 *  instanceof 연산자
		 *  두 변수가 같은지 비교 할 수 있는 연산자 : 클래스 명만 같은지 비교
		 */
		
		System.out.println((m1 instanceof MemberDto) + " <- instanceof");
		
		try {
			//Class class는 클래스의 메타정보 (jvm에서 활용 등), Class.forName 사용시 인수에 해당되는 네임스페이스, 클래스는 메모리에 등록된
			Class getClass = Class.forName("kr.or.ksmart.TestClass");
			System.out.println(getClass.getName());
			System.out.println(getClass.hashCode());
			//동적으로 객체화
			/**
			 * Class 클래스 내의 newInstance 메서드를 활용하여 동적 인스턴스화
			 * object 타입으로 결과값 나온다.
			 */
			Object mObject = getClass.newInstance();
			//동적 인스턴스화된 결과를 다운 캐스팅
			//instanceof 연산자로 비교
			if(mObject instanceof TestClass) {
				TestClass t = (TestClass) mObject;
				//다운 캐스팅 된 객체를 적접 활용
				t.setName("홍길동");
				System.out.println(t.getName());
			}
			
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		
	}
}
반응형

'Backend > JAVA' 카테고리의 다른 글

MVC (model view controller) 패턴  (0) 2020.05.13
JAVA 인터페이스 interface  (0) 2020.04.29
JAVA equals( ) 메서드  (0) 2020.04.29
JAVA - hashCode( )  (0) 2020.04.29
JAVA 추상 클래스  (0) 2020.04.27

댓글