위 글은 김성박선생님의 강의를 정리한 글입니다. 자세한 내용은https://www.facebook.com/groups/codingeverybody/posts/7530033737037097/ 을 참고해주세요.
위를 실행 시키면 다음과 같은 결과를 얻는다.
위 그림은 println메소드에 관한 설명이다. Object타입의 x를 String.valueOf를 이용해 변수 String에 담는다.
코드분석: obj == null 이면 "null"을 반환하고, obj != null 이면 obj.toString()을 반환한다.
System.out.println(o1.toString()); == System.out.println(o1);
위의 두 코드는 같은 뜻이다.
우리가 원하는 c1객체를 문자로 출력하기 위해서는 Object객체의 toString 메소드를 오버라이딩 해야한다는 것이다.
Object가 오버라이딩하라고 제공하는 메소드
- toString()
- eqauls() & hashCode()
생성자
생성자는 메소드와 비슷하지만 return 타입이 없고, 클래스 이름과 같아야 한다.
매개변수가 0개인 생성자를 기본생성자라고 한다.
생성자가 하나도 없으면 아무일도 안하는 기본생성자가 자동으로 만들어진다.
위의 코드에서
c1.printName(); 은 c1객체에서 아무 값도 받지 않았으니 default값인 null이 name에 저장된다.
c2.printName(); 은 c2객체에서 urstory라는 값을 받았으니 urstory가 저장된다.
또 다른 예시
그 이유는 User 클래스에서 User생성자를 만들었는데, 생성자를 만들면 기본생성자는 생성이 되지 않기 때문이다.
UserExam클래스에서 User객체에 name과 email을 넣어 주어야 한다.
이제, user의 이름과 이메일을 불러와 보도록 하자.
위와같이 user객체를 통해 name을 얻으려 했는데 오류가 발생한다. 그 이유는 User클래스에서 email,password,name을 private로 설정했기 때문이다.
위와 같이 get메소드를 만들어주고,
메소드를 이용해 name과 email을 불러 올 수 있다.
위의 메소드처럼 name과 email을 불러올 수 있지만, 변경할 수 없는 것을 불변객체라고 한다.
Object 객체의 toString() 이용한 방법
User클래스에 아래와 같이 toString메소드를 오버라이딩해보자.
그리고, UserExam에서 생성자 user를 호출하면,
toString메소드를 통해 email과 name의 값을 얻을 수 있다.
User클래스
위의 코드에서 User생성자를 보면 중복되는 부분이 많이 보인다.
중복된 부분을 줄여보자.
this생성자를 이용해, 코드의 중복을 해결 할 수 있다.
단 this생성자는 코드의 맨 앞줄에 위치해야만 한다.
생성자 오버로딩
super() 예시
위의 그림에서 c1생성자와 b1 생성자를 만들고 Car2Exam을 실행시키면 "Car2()생성자 호출"이 2번 호출이 된다.
부모의 생성자를 추가하는 코드가 자동으로 생성되기 때문이다.
부모의 생성자를 호출 할 때는 super()를 사용한다.
불변(Immutable)객체