// ******* equals()메서드를 재정의(오버라이드) 하려고 따로 만들었음
public boolean equals(Object obj) {
if(obj instanceof Student) {
Student std = (Student)obj; //Student자료형의 매개변수
if(studentID == std.studentID) {
return true;
} else return false;
}
return false;
}
public boolean equals(Object obj) ==> Object클래스에 구현된 equals()를 오버라이드하면서 Object형의 obj라는 매개변수를 이용함. 이 때 obj자리에 들어가는애는 Object형으로 자동 업캐스팅됨 ===> Object는 모든 클래스의 상위클래스이기 때문.
if(obj instanceof Student) ==> obj가 Student의 인스턴스인지를 묻는중
(instanceof 는 되게 많이 쓰인다고 함, 앞의 매개변수? 가 뒤의 인스턴스인지를 묻는 용도)
Student std ==> (Student)obj; 들어올떄 업캐스팅해서 Object형인 obj를 Student(하위 클래스)로 다운캐스팅해서 Student형인 std에 대입.
if(studentID == std.studentID) ==> 만약에 멤버변수의 studentID가 std로 대입 된 인스턴스의 studentID와 같다면
return true; ==> 트루를 뱉는다
else return false; ==> 다르다면 false를 뱉는다
return false; ==> Student의 인스턴스조차 아니라면 애초에 false를 뱉는다.
Object클래스의 메서드
객체의 정보를 String으로 바꾸어서 사용할떄 많이 쓰임
String이나 Integer클래스에는 이미 재정의 되어 있음
String 문자열 값 반환
Integer 정수 값 반환
선언이나 특정 멤버변수값을 반환한다.
===> ???????? 모르겠음
예제
public String toString() { return studentID + ", " + studentName; }
을 적어놓고
public static void main(String[] args) { Student studentLee = new Student(100, "이상원");
을 입력하니
System.out.println(studentLee); //object.Student@6f2b958e
인스턴스 명만 입력해도 주소가 나오는게 아니고, studentID + ", " + studentName;가 출력된다.
to string()을 재정의 해서 그런것 같다
그냥 객체 선언하고 투스트링 실행시키면 주소값이 뜬다고 한다.
실제로 해 봄.
Mak a = new Mak();
System.out.println(a.toString());
study.Mak@3d012ddd
결과값
toString()은 뭔가 뱉어내야 하는 값을 뱉어내게 하는 메소드인데 보통 재정의하거나
날씨, 시간 등의 클래스에 연결해서 사용한다고 한다.
우리가 편하게 쓰던 String은 클래스이고
안에는 잠깐 배운 concat()메서드, charAt()메서드 등등 여러가지 메서드가 포함돼있다.
주말에 추가로 공부.
코딩테스트 기초 단계를 풀다가 charAt()의 존재에 대해 배웠다.
또한 뜻도 제대로 모른 채로 Scanner클래스를 import해서 쓰고 있었다.
Scanner클래스를 쓰면 뭔가를 입력할수 있는것 같다.
실제로 코딩테스트로 짜놓은코드에 아무생각없이 Scanner를 넣었을 때
콘솔창에 초록색 글씨로 내가 입력할수 있는 여지가 생겼다.
대충 그런 기능인것 같다.
- 기본적인 데이터 타입들을 Scanner 의 메소드를 사용하여 입력받을 수 있다.
예로 들어 100을 입력하고자 할 때, String(문자열)로 입력받고 싶으면 next() 나 nextLine() 을, int(정수)로 입력받고 싶다면 nextInt() 를 사용하여 입력받으면 알아서 해당 타입으로 입력된다.
- Scanner 을 사용할 시 util 패키지를 경로의 Scanner 클래스를 호출해야 한다.
자바에서 쓰이는 대부분의 클래스는 lang 패키지가 아니라면 import 을 통해 호출해주어야 한다.
Scanner 의 경우는 java.util 패키지에 있다.
- 공백(띄어쓰기) 또는 개행(줄 바꿈)을 기준으로 읽는다.
Scanner 의 입력 메소드들은 대부분 공백과 개행(' ', '\t', '\r', '\n' 등등..)을 기준으로 읽는다. 이 덕분에 사용자의 편의에 따라 쉽게 입력을 받을 수 있다.
그래서 입력칸이 2개인 내 코딩테스트 예제에
숫자를 입력하고 엔터 입력하고 엔터
총 두번을 입력할 수가 있었다.
더 자세한 건 차후에 알아보고 코딩테스트 하나
\ /\
) ( ')
( / )
(__)|
를 출력하시오
public class Main{
public static void main(String[] args){
System.out.println("\\ /\\");
System.out.println(" ) ( ')");
System.out.println("( / )");
System.out.println(" \\(__)|");
}
}
\는 단독으로 쓰일 수 없기 떄문에 에러가 발생한다
두개 붙여서 적으면 적힌다.
따옴표도 마찬가지로 의미가 있는 글자이기 떄문에 단독으로 출력 불가능하다.
따옴표와 백슬래쉬 앞에 백슬래쉬를 붙이면 그대로 나올수있다.
public class Main{
public static void main(String[] args){
System.out.println("|\\_/|");
System.out.println("|q p| /}");
System.out.println("( 0 )\"\"\"\\");
System.out.println("|\"^\"` |");
System.out.println("||_/=\\\\__|");
}
}
따옴표도 있어서 따옴표 앞에도 백슬래쉬를 붙여 줬다.