본문 바로가기
IT/자바

자바 equals 메소드 복습

by 독서실총무J 2017. 5. 14.
반응형

아우 복습을 하루 걸렀다

역시 귀차니즘이 세상에서 제일 무섭다

고딩때 부터 부지런해져야지 다짐했는데

서른이 되어서도 나는 이렇다니 


하루에 하나 쓰는게 은근히 힘들다

나쁜 버릇은 금방 몸에 붙지만

좋은 습관은 굉장히 힘들다고 누가 그랬다

맞는말인것 같다 


어제처럼 거르지 않고 포스팅 하도록

오늘부터 다시 열심히 써봐야겠다


오늘은 equals 메소드에 대해서 알아보자

이름부터 뭘 하는놈인지 분명히 알수 있다

같은지 알아낼수 있는 자바에서 기본적으로

제공 해주는 메소드가 equals이다


코딩을 하다보면 같냐 아니냐를 구분하는 

경우가 정말 자주 있는것 같다 


코딩은 인생의 축소판과 같다고 생각하는데,

인생처럼 선택의 연속을 판단 해야 하기 때문이다

그거 코딩 아니고 바둑이지 않냐 따질 사람은

이창호9단급 실력이 아니면 조용히 하자


하 지금 멘트는 되게 재미없었다

요새 사람을 안만나니 점점 노잼이 되가는것 같다

노잼인 나와 함께 equals에 대해서 한번 보자


class EqualsEx {
	public static void main(String[] args) {
		String str1 = "abc";			// "abc"
		String str2 = new String("abc");		// "abc"

		System.out.println(str1 == str2);
		System.out.println(str1.equals(str2));
	}
}

예제를 통해서 알수있듯이 equals는 

매개변수에 들어가는 변수와 비교를 하는것이다


그런데 이 코드의 결과가 어떻게 될까?

놀랍게도 순서대로 false, true이다

분명 똑같은 String 형의 "abc"인데

==와 equals의 결과가 다를까?


간단하게 말하자면 ==는 연산자이고,

equals는 메소드이기 때문이다

더 자세히 말하자면 String에 대해서

말해야 하는데 이부분은 다음에 

언급할 기회가 있으니 그때 하도록 하자


누가 혹시나 왜 두개의 결과가 다르냐고 

물어보면 그냥 기본적인것만 말하고 

더 자세히 물어보면 다음 기회에 

내 블로그를 같이 보도록 하자


class Member { private String name; private int age; private String tel; private String job; public Member(String name, int age, String tel, String job) { setName(name); setAge(age); setTel(tel); setJob(job); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getTel() { return tel; } public void setTel(String tel){ this.tel = tel; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } @Override public boolean equals(Object o) { if(o == null || !(o instanceof Member)) { return false; } Member other = (Member)o; return name.equals(other.getName()) && age == other.getAge(); } } class MemberEx { public static void main(String[] args) { Member m1 = new Member("a", 20, "123-4567", "none"); Member m2 = new Member("a", 20, "333-4567", "student"); System.out.println(m1.equals(m2)); } }


코드가 길어보이지만 이미 다 알고 있는

getter와 setter를 제외하고 재정의된 equals만 

알아보도록 하자


재정의된 것은 이름과 나이가 같을경우

동일한 Member라고 생각하면 된다


main문에 m1과 m2는 tel과 job이 다르지만

이름과 나이가 같으므로 동일인물이므로

결과는 true가 된다


if문안에 Member형 객체인지 확인하는 문장은 필수이다

우리가 어떤것을 비교 하고 싶은지 명확하게 기재해줘야 한다


class Ball { private int num; private int radius; public Ball(int num, int radius) { setNum(num); setRadius(radius); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getRadius() { return radius; } public void setRadius(int radius) { this.radius = radius; } @Override public boolean equals(Object o) { if(o == null || !(o instanceof Ball)) { return false; } Ball temp = (Ball)o; return num == temp.getNum(); } } class CompareBall { public static void main(String[] args) { Ball b1 = new Ball(3, 10); Ball b2 = new Ball(9, 5); Ball b3 = new Ball(3, 5); Ball b4 = null; System.out.println(b1.equals(b4)); } }


오늘은 예제가 3개뿐이다 

이번이 마지막 예제이다


번호와 반지름을 가진 공객체를 비교하고 있다

이전에 보았던 코드와 별반 다를게 없다

직접 쳐보고 예상과 맞는지 확인해보도록 하자


equals는 단순히 같은지 다른지만 구분해준다

어떤것이 더 큰지 작은지 확인하는 메소드는

따로 있으나 이 내용은 다음에 복습하도록 하자

성질 급한 사람은 미리 찾아보아도 된다


하루밖에 안 빼먹었는데도

포스팅하는게 왜이리 어색한지 모르겠다

다시 매일매일 빼먹지 말고 쓰도록 노력 

해보아야 겠다 

반응형

댓글