이 글은 김성박선생님의 4/5 강의를 바탕으로 쓰여진 글입니다.
더 자세한 내용은
https://www.facebook.com/groups/codingeverybody/posts/7530033737037097/ 를 참고해주세요.
좋은 객체는 응집도는 높고 결합도(Coupling)는 낮다.
객체의 역할, 책임 그리고 협력
좋은 객체란 역할과 책임에 충실하면서, 다른 객체와 잘 협력하여 동작하는 객체를 말한다. 반대로 나쁜 객체란 여러가지 역할을 한 가지 객체에게 부여하거나, 이름과는 맞지 않는 속성과 기능을 가지도록 하거나 제대로 동작하지 않는 객체를 말한다. 또한 다른 객체와도 동작이 매끄럽지 않는 객체를 의미한다.
다형성(Polymorphism)
프로그램 언어의 다형성은 그 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수,변수,식,오브젝트,함수,메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다. 반댓말은 단형성으로, 프로그램 언어의 각 요소가 한가지 형태만 가지는 성질을 가리킨다.
출처: 위키피디아
System.out.println(...)
주목해야 할 점은 메소드 이름은 같지만, 받아들이는 type이 다르다는 것이다.
다형성 - 메소드 오버로딩(Overloading)
예를 들어, int를 출력하는 메소드의 이름은 printInt이고, 문자열을 출력하는 메소드가 printString 이라고 한다면 사용자는 많은 메소드의 이름을 외워야 할 것이다.
StandardOutput 클래스
위와 같이 메소드명은 같으나 매개변수가 다른 메소드들을 만들었다.
StandardOutput 클래스가 static한 필드를 갖고 있지 않기 때문에, println은 인스턴스메소드이다.
위의 메소드를 실행시키기 위해서는
1. 인스턴스를 만들어서 사용한다.
2. static 필드를 생성한다.
위 2가지 방법이 필요하다고 저번 시간에 배웠다!
실행시켜보자,
실행을 시키기 위해서는 static한 메소드가 있어야 한다.
패키지
패키지 이름 규칙
com.example.util 폴더에 Calculator을 실행해보자.
다른 패키지에서 Calculator 사용하기
위와 같이 main패키지에서도 Calculator에 정의된 메소드를 사용하고 싶으면,
Calculator을 import를 해야 한다.
패키지 import 하기
위와 같은 구조가 있다고 했을때, CalculatorMain 클래스에서 util, util1에 있는 패키지에 있는 같은 이름의 클래스의 메소드를 사용한다고 하면 어떤 일이 발생할까.
이름이 같고, 패키지가 다른 클래스의 경우 객체 생성시에 패키지 경로를 입력하게 된다!
상속
~는 ~다. ~는 ~의 종류 중 하나이다. 라고 표현할 수 있다면 이것은 상속관계라고 말할 수 있습니다. 상속관계는 is a 관계 혹은 kind of 관계라고 하기도 한다.
전자제품은 켜다,끄다 라는 기능을 갖고 있고 이 기능을 TV, 전자레인지가 상속받는다!
상속이란 일반화와 확장이라는 개념을 합한 것이라고 생각하자. 부모클래스를 상속받는 것은 부모가 가지고 있는 것을 자식이 물려받아 사용 할 수 있다는 것을 의미한다.
위의 그림처럼 우리가 무엇을 만들때나, 어떤 기능을 볼 때 상속을 이용하면 매우 편리해 보인다!
하지만 제대로 사용하지 않으면, 결합도가 높아지기 때문에 이로 인해 재사용하기가 어려워진다.
따라서 상속은 제.대.로 알고 쓰도록 하자!
[접근 제한자] [abstract | final] class 클래스명 extends 부모클래스명{
....
}
아무것도 상속받지 않으면 자동으로 java.lang.Object를 상속받는다.