1. 상속에 관하여 이해하고 활용할 수 있다.
2. 캡슐화에 관하여 이해하고 활용할 수 있다.
- 상속
✔︎ 상속 : 기존 클래스를 재활용해서 새로운 클래스를 작성하는 자바 문법 요소
✔︎ 상위-하위 클래스 관계 : 하위 클래스는 상위 클래스가 가진 모든 멤버를 상속받음
✔︎ 상속을 사용하는 이유
① 코드를 재사용하기 때문에 보다 적은 양의 코드로 새로운 클래스 작성 가능 → 코드의 중복 제거
② 다형적 표현이 가능 : 하나의 객체가 여러 모양으로 표현될 수 있음
✔︎ 단일 상속(single inheritance)만 허용
package HelloJava;
public class HelloJava {
public static void main(String[] args) {
Person person = new Person();
Programmer programmer = new Programmer();
Dancer dancer = new Dancer();
Singer singer = new Singer();
person.name = "nasaram";
person.age = 20;
System.out.println(person.name);
System.out.println(person.age);
person.learn();
person.walk();
person.eat();
System.out.println();
programmer.name = "kimcoding";
programmer.age = 28;
System.out.println(programmer.name);
System.out.println(programmer.age);
programmer.companyName = "Naver";
System.out.println(programmer.companyName);
programmer.learn();
programmer.walk();
programmer.eat();
programmer.coding();
System.out.println();
dancer.name = "leedancer";
dancer.age = 23;
System.out.println(dancer.name);
System.out.println(dancer.age);
dancer.groupName = "sewupa";
System.out.println(dancer.groupName);
dancer.learn();
dancer.walk();
dancer.eat();
dancer.dancing();
System.out.println();
singer.name = "parksinger";
singer.age = 35;
System.out.println(singer.name);
System.out.println(singer.age);
singer.bandName = "buzz";
System.out.println(singer.bandName);
singer.learn();
singer.walk();
singer.eat();
singer.singing();
}
}
✔︎ 상위 클래스인 Person 클래스로부터 하위 클래스인 Programmer, Dancer, Singer 클래스들이 상속받아 Person클래스의 모든 멤버를 상속 받음
✔︎ 포함(composite) 관계 : 상속처럼 클래스를 재사용할 수 있는 방법으로, 클래스의 멤버로 다른 클래스 타입의 참조변수를 선언하는 것
✔︎ 상속 관계 vs 포함 관계 구별법
✓ 상속 관계 : ~은 ~이다 (IS-A)
관계
✓ 포함 관계 : ~은 ~을 가지고 있다 (HAS-A)
관계
✔︎ 메서드 오버라이딩(Method Overriding) : 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것
✔︎ 쉽게 말해 덮어쓴다는 말
✔︎ 메서드 오버라이딩 사용 조건 3가지
① 메서드의 선언부(메서드 이름, 매개변수, 반환타입)이 상위클래스의 선언부터와 완전히 일치해야 한다.
② 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
③ 예외는 상위 클래스의 메서드보다 많이 선언할 수 있다.
✔︎ super
: 상위 클래스의 객체
✔︎ super()
: 상위 클래스의 생성자를 호출하는 것
✔︎ 둘 다 상위 클래스의 존재가 있고, 상속 관계가 전제됨
✔︎ super()
메서드는 앞서 공부한 this()
메서드와 동일하게 생성자 안에서만 사용이 가능하고, 반드시 첫 줄에 와야함
✔︎ Object 클래스 : 최상위 클래스, 모든 자바 클래스들은 Object 클래스로부터 확장됨
✔︎ 아무 것도 상속받지 않는 클래스에는 자동적으로 extends Object
가 추가됨
✔︎ 따라서, 모든 클래스들은 Object 클래스의 멤버들을 자동으로 상속받아 사용 가능
ex) toString() - 객체 정보를 문자열로 출력, equals(Object obj) - 등가 비교 연산(==)과 동일하게 스택 메모리 값을 비교
- 캡슐화
✔︎ 캡슐화 : 특정 객체 안에 관련된 속성과 기능을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것
✔︎ 캡슐화 목적 두 가지
① 데이터 보호 목적
② 내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출 방지
✔︎ ∴ 캡슐화의 가장 큰 장점 : 정보 은닉(data hiding)
✔︎ 패키지(package) : 특정 목적을 공유하는 클래스와 인터페이스의 묶음
✔︎ 패키지의 목적
① 클래스들을 그룹 단위로 묶어 효과적인 관리
② 클래스의 충돌 방지
✔︎ 계층 구조 간 구분은 점(.
)으로 표현
✔︎ 패키지가 있는 경우 소스 코드의 첫 줄에 반드시 package 패키지명
표시
✔︎ import 문 : 다른 패키지 내의 클래스를 사용하기 위해 사용
✓ 일반적으로 패키지 구문과 클래스문 사이 작성
✓ import문 작성 방법
ìmport 패키지명.클래스명;
// 또는
import 패키지명.*; // 해당 패키지의 모든 클래스
✔︎ 제어자(Modifier) : 클래스, 필드, 메서드, 생성자 등에 부가적인 의미를 부여하는 키워드
✔︎ 크게 접근 제어자와 기타 제어자로 구분
✓ 접근 제어자 : public
, protected
, (default)
, private
✓ 기타 제어자 : static
, final
, abstract
, native
, transient
, synchoronized
등
✔︎ 제어자는 하나의 대상에 여러 제어자를 사용 가능하나, 접근 제어자는 단 한번만💥 사용할 수 있음
✔︎ 접근 제어자(Access Modifier)
✔︎ 접근 제어자 사용시
✓ 클래스 외부로의 불필요한 데이터 노출 방지 (data hiding)
✓ 외부로부터 데이터가 임의로 변경되지 않도록 막을 수 있음
✔︎ 접근 제한 범위
✓ public(접근 제한❌) > protected(동일 패키지 + 하위 클래스) > default(동일 패키지) > private (동일 클래스)
✓ 표
✔︎ setter 메서드 : 외부에서 메서드에 접근하여 조건에 맞을 경우, 데이터 값을 변경 가능하게 해줌. 일반적으로 set-
붙여 정의
ex. setName(매개변수)
✔︎ getter 메서드 : 설정한 변수 값을 읽어오는 데 사용. 일반적으로 get-
붙여 정의
ex. getName()
✔︎ 이를 통해, 데이터를 효과적으로 보호하면서도 의도하는 값으로 변경하여 캡슐화를 보다 효과적으로 달성 가능
☞ 객체지향 프로그래밍에 들어오면서 확실히 이론적으로 이해가 되더라도 뭐가 다른지, 어디서 오류가 나타나는지 알기 위해 직접 실습해보며 공부해나가는 게 엄청 중요한 것 같다. 객체지향 프로그래밍의 핵심 4가지 (상속, 캡슐화, 다형성, 추상화) 중 두 가지를 오늘 공부하면서 확실히 직접 Intellij를 통해 코드를 쳐보면서 맞닥들인 상황에 대응하는 식으로 연습했다. 물론, 시간은 눈으로 읽는 거보다 수 배로 소요가 되지만, 나중을 위해서라도 뭔가 이렇게 공부해야될 것 같다고 감각적으로 느껴졌다😅 또한, 실시간 세션에서도 강사님께서 모두 사용되는 좋은 예시를 들어주며 흥미롭게 강의해주셔서 이해하는데 큰 도움이 된 것 같다 :)
아직 Intellij를 만지는 것부터 미숙하고 여러 단축키들을 알아가야 하지만 지금처럼 차근차근 커리큘럼에 맞게 한 단계씩 잘 따라가고, 밟아간다면 언젠간 빛을 발할 것이라 생각이 든다🔥
이제 다시 또 한 주가 시작됐다..! 점점 가는 길이 험할 것 같지만 이번 주도 화이팅 해보자구! 😤
・ 다형성
・ 추상화