Java 의 객체지향을 계속 배워가고 있다.
어제 클래스, 메소드, 생성자. 등등의 것들을 배웠는데.
오늘은 "접근제어자"에 대해 배우게 되었다.
Java에서는 접근제어자가 총 4종류 있다.
public
private
default
protected
각 접근제어자마다 외부에서 접근할 수 있는 범위가 다르다.
public의 경우, 같은 클래스 내 / 같은 패키지 내 / 다른 패키지에서도 호출할 수 있는 변수,메서드가 포함된다.
private의 경우, 같은 클래스 내에서만 호출 가능한 변수,메서드가 포함되며
default의 경우 = 접근제어자를 설정하지 않거나, default로 명시적으로 해놓은 경우
같은 패키지 내에서만 접근 가능하다.
protected 이 특이한 케이스인데, 같은 패키지에서 접근 가능 + 다른 패키지에서, 이 클래스를 상속받은 경우 자식 클래스에서 접근 가능하다.
코드의 응집성과 결합성을 위해 & 객체지향의 캡슐화를 위해 이런 기능을 지원한다.
마치 자동차 운전자가 자동차의 동역학적인 요소들을 다 알 필요는 없지 않은가?
자동차 회사에서 제공하는 인터페이스인, 핸들/액셀/브레이크/기어만 바꿀 줄 알면, 그 아래에서 자동차가 동작하는 것은 알아서 하듯.
그것과 마찬가지의 맥락이다.
=======================
[ 추상클래스 / 인터페이서 : 다형성 ]
다형성이란, 한가지 모양이 다양한 형상/의미를 가진다라는 뜻이다.
Method Overloading 같은 경우도 같은 맥락이라 할 수 있겠다.
클래스간 상속을 통해서, B클래스가 A클래스를 상속받은 경우
B is a kind of A 가 된다.
C클래스가 A클래스를 상속받은 경우, C is a kind of A 가 되고.
이런 식으로 A클래스로부터 파생된 클래스가 많아질 수 있다.
이 때, A클래스의 인스턴스를 통해서 B, C 등등 A클래스로부터 상속된 타입을 다 찍을 수 있다는 것 = Reference 할 수 있다는 것.
이를 통해 다형성이 구현된다.
이 때, Method Overriding을 통해, 부모 클래스에 있는 메서드를 자식 클래스에서 재정의할 수 있게 되고
부모 클래스 타입으로 찍을 수 있는 것은, 자식 클래스에 존재하는 부모클래스의 멤버변수 / 멤버함수인데,
코드를 실행시키는 Runtime에서 부모 클래스가 자식 클래스의 부모클래스 멤버함수를 호출하면.
자식클래스에서 Override 한 함수가 호출된다. 이를 통해 다형성이 완성된다.
코드의 수정이 용이해지며, 명확해진다.( 유지보수 비용이 줄어든다! )
추상 클래스와 인터페이스를 통해 다형성을 구현하는데,
추상 클래스는 extends 를 통해 is-a 관계를 만들어주며, 추상화된 객체의 변수와 함수를 통일해서 내가 공통적으로 실행을 보장하고 싶은 부분을 abstract 키워드를 통해, 자식 클래스에서 구현을 강제하게 할 수 있다.
추상클래스 그 자체로는 인스턴스를 생성할 수 없다.
인터페이스는 '동작'을 명세한다. 그렇기에 이름이 -able ( = ~를 할 수 있는 )인 경우가 많다.
인터페이스를 통해, '표준'을 정의할 수 있다.
어떤 동작의 메서드 이름을 통일하고, 인터페이스로부터 파생된 = 인터페이스를 구현하는 ( implement ) 모든 객체에
동일한 동작을 보장할 수 있다는 점에서 코드를 짜기 편리해진다, 그리고 서비스에 신뢰성이 생긴다.
'TIL' 카테고리의 다른 글
[ 23/1/30 TIL : Spring Exception : UnsatisfiedDependencyException / 이미 포트 8080을 사용하고 있는 경우 ( Web server failed to start. Port 8080 was already in use. ) (0) | 2023.01.30 |
---|---|
[ 1/25 ] 구조해조 KPT 회고 (0) | 2023.01.26 |
[ 23년 1월 9일 Today I Learned ] 자바 기본 문법 & 클래스 복습 (0) | 2023.01.10 |
[ 11/29 일잘하조 KPT 회고 ] (1) | 2022.11.29 |
[ 11월 14일 Today I Learned ] Java 클래스, 상속, 다형성 (0) | 2022.11.15 |