16일날 정말 너무심한 감기에 걸려 17일 오후2시까지 정신이하나도없었다.
책상에 앉아 있었지만 제대로된 공부를 하지 못해서 16일 TIL을 쓰지 못했다. 오늘도 정신이 몽롱해 아쉽지만..
그럼에도 배운것!
<객체 지향 프로그래밍>
처음부터 모든 프로그래밍을 한 클래스에 작성한느 것이 아닌, 조합하여 사용할 수 있게 역할을 분리하여 클래스를 작성한다. 그후 조각 나있는 프로그램들을 조합하여 프로그램을 작성할 수 있게 만든다. 이때 각각의 개체를 객체라고 한다.
이는 현실과 밀접하게 이루어져 있어 이해하기 더 쉬운 프로그래밍 방식이라고 생각한다.
객체속에는 메서드와 필드로 이루어져 있다. 메서드는 객체에서 사용가능한 함수라고 생각했다. 그리고 필드는 객체가 가지고 있는 변수값들.
객체를 이용한 프로그래밍 방식으로는 예를들어 사람에 대해 얘기해보겠다.
사람이라는 클래스가 있다고 생각해보자. 사람의 특징을 몇가지 정해서 클래스를 작성해보면
사람의 나이, 이름, 달리기를 할 수 있는 클래스를 만들어 보자.
public class Person {
int age;
String name;
double runningPace;
public Person(int age, String name)
{
this.age = age;
this.name = name;
}
int running (int runningPace){
this.runningPace = runningPace;
System.out.println(runningPace+"의 속도로 뛰고 있어요.");
return runningPace;
}
}
이는 메인 코드가 아니기에 이 클래스만으로는 프로그램을 돌릴 순 없다. 하지만 앞으로 나이, 이름, 달리기를 사용할 클래스를 작성할 때 이 클래스를 이용하여 작성할 수 있다.
<상속>
이때 사용되는 게 상속이다. 상속은 부모클래스가 가지고 있는 변수와 메서드를 자식 클래스가 사용 할 수있도록 하는 것.
이때는 extends 키워드다.
예를들어 Person클래스를 상속받는 Man 클래스가 있다고 생각해보자.
public class Man extends Person {
String gender = "남자";
public Man(int age, String name)
{
this.age=age;
this.name=name;
}
public String getGender() {
return gender;
}
}
Man클래스에는 running 메서드가 없지만, 부모클래스인 Person클래스엔 running 메서드가 있다. 이때 Man클래스로 생성된 인스턴스는 running메서드를 사용 가능하다. 왜냐하면 Person클래스를 상속 받았기 때문이다. 이를 통해 , Man클래스에는 필드와 메서드를 많이 적지 않아도 상속을 통해 많은 기능을 사용 가능했다. 이것이 객체 지향프로그래밍을 하면 얻을수 있는 장점이다.
<오버라이딩>
오버라이딩은 부모 메서드를 자식메서드에 상속 받을 때, 자식 메서드가 자신의 클래스에 맞게 재정의 하는 기능.
오버라이딩에는 규칙이 존재한다.
1. 부모 클래스와 자식 클래스 사이에만 성립 가능.
2. static메서드는 클래스에 속하기에 상속 자체가 안되며, 오버라이딩도 불가능.
3. 접근 제한자가 private인 메서드는 상속이 안되어 오버라이딩도 불가능.
4. interface를 구현해서 메서드를 오버라이딩 할 때는 반드시 접근 제한자를 public으로 정의해야함.
5. 오버라이딩 할 때메서드의 인자의 갯수와 타입이 완전히 일치해야하며, 리턴타입도 일치해야 함.
6. 부모 클래싀 메서드 접근제한자보다 좁아질 수 없음.
7. 부모 클래스의 메서드보다 더 많은 예외를 던질 수 없음.
8. fianl 예약어가 지정된메서드는오버라이딩 불가능.
오버라이딩은 자식 클래스에 맞는 방식으로 메서드를 재정의 할 수 있어 객체를 더 유연하게 사용 할 수있게 만들어 준다.