🔶 객체지향의 특징 4가지의 개념과 예시 코드를 적어보자
객체지향의 4가지 특징에는
1. 캡슐화
2. 상속
3. 추상화
4. 다형성
이 있다.
< 머릿속 지식 뽑아보기 >
우선 '객체지향' 이라는 단어를 보자마자 자바가 떠올랐다... 학원에서든 어디서든 '객체지향 언어 = 자바' 라고 주입식으로 습득(?)해왔기 때문이다.
예전에 정보처리기사 공부할 때 객체지향의 특징을 공부했었던 기억이 있는데... 기억이 가물가물하다.. 솔직히 캡슐화, 추상화, 다형성에 대해서는 명확히 떠오르거나 하는 개념이 없다..
상속 관련해서는, 자식클래스가 부모클래스의 메서드 등을 그대로 물려받아(?) 사용가능하다는 것으로 대강 알고 있다..
상속시 자바에서는
자식클래스명 extends 부모클래스명{· · ·
}
으로 extends라는 키워드를 사용한다.
< 정확한 지식 기록하기>
1. 캡슐화(encapsulation)
: 서로 연관 있는 기능들을 하나의 캡슐로 만들어 외부로부터 데이터를 은닉, 보호하는 것을 의미한다.
이를 위해 접근제어자( public, default , protected, private )를 사용한다.
또한 getter/setter 라는 메서드를 사용하여 내부 데이터에 제한적 접근을 하게 한다.
- getter: 변수의 데이터를 '가져옴' ex) public int getNum(){...}
- setter: 변수의 데이터를 쓰고자(적용하고자) 할 때 쓰임 ex) public void setNum(int num) {...}
Class TelNum {
private int telNum;
public int getTelNum(){
return telNum;
}
public void setTelNum(int telNum) { // telNum의 접근제어자가 private이므로 TelNum클래스에만 사용 가능함. 따라서 public 접근제어자를 사용하는 setTelNum 이라는 메서드 생성.
if (telNum >= 0) {
this.telNum = telNum;
}
}
}
// 객체생성 및 실행
Public class TelNumTest {
public static void main(String[] args) {
TelNum t = new TelNum();
t.setTelNum(9999);
System.out.println(t.getTelNum);
}
}
2. 상속(inheritance)
: 어떤 객체의 필드(변수)와 메서드를 다른 객체가 물려받아 재사용하는 것을 의미한다.
부모 클래스를 상위(super)클래스, 자식클래스를 하위(sub)클래스라고 표현하기도 한다.
class Salary {
int deposit, withdrawal;
public void setOprands(int deposit, int withdrawal) {
this.deposit = deposit;
this.withdrawal = withdrawal;
}
public void sum() {
System.out.println(this.deposit + this.withdrawal);
}
public void avg() {
System.out.println((this.deposit + this.withdrawal) / 2);
}
}
class Calculator extends Salary {
public void substract() {
System.out.println(this.deposit - this.withdrawal);
}
}
public class CalculatorTest1 {
public static void main(String[] args) {
Calculator ca = new Calculator();
ca.setOprands(20, 10);
ca.sum();
ca.avg();
ca.substract();
}
}
CalculatorTest1 클래스 안에서 정의되지 않은 메서드들을 사용할 수 있는 이유는(호출 가능한 이유는)
위의 Calculaotor라는 클래스가 salary라는 클래스를 상속받고 있기 때문이다.
참고
https://veneas.tistory.com/entry/Java-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%83%81%EC%86%8D-Inheritance
3.추상화(Abstration)
: 특정 메서드의 불필요한 부분은 배제하고 주된 부분만 부각시키는 것을 의미한다.
추상클래스와 추상메서드가 있다.
- 추상 클래스를 상속받은 클래스는 추상메서드를 오버라이딩(재정의) 해야한다.
- 추상 클래스는 미완성 클래스이기 때문에, 인스턴스(객체)를 생성할 수 없다.
- 추상클래스는 반드시 상속관계를 통해서만 사용가능하다.
-출처:https://itprogramming119.tistory.com/entry/14-%EC%B6%94%EC%83%81%ED%99%94
<추상메서드 예제>
abstract class signal {
abstract public void stop();
abstract public void go();
public void sign() {
System.out.println("look at the signal!");
}
class signalTest extends signal {
public void stop(){
System.out.println("please stop");
}
public void go(){
System.out.println("please go");
}
}
public class main {
public static void main(String[] args) {
signalTest s = new signalTest();
s.go(); // 부모클래스로부터 상속받은 추상메서드를 직접 구현한 메서드를 실행
s.sign(); // 부모클래스의 인스턴스 메서드 실행
아직 이해가 부족하여 다음 티스토리 게시글을 응용하여 코드를 작성해보았습니다.
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4Abstract-%EC%9A%A9%EB%8F%84-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
☕ 추상 클래스(Abstract) 용도 완벽 이해하기
추상 클래스 와 추상화 우리가 지금 까지 사용해왔던 일반적인 클래스는 구체적(concrete)으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다. 그 반대로 추상 클래스는 구체적이지 않은
inpa.tistory.com
4. 다형성(abstration)
: 하나의 메서드나 클래스가 상황에 따라 다양한 방법으로 동작하는 것을 의미한다.
ex) '나'는 나의 부모님을 딸이자, 나의 남편의 아내이자, 회사에서는 사원으로서 역할(형태)을 가진다.
오버로딩은 다형성의 대표적인 예이다.
class HwTest{
public void numb(int tag){
System.out.println("숫자출력");
System.out.println(tag);
}
public void numb(String tag){
System.out.println("문자출력");
System.out.println(tag);
}
}
public class PolymorphismOverloading {
public static void main(String[] args) {
HwTest m = new HwTest();
m.numb(1); // 메서드 numb의 parameter가 1이므로 datatype은 int. 즉, numb(int tag) 메서드 실행
m.numb("one"); // 메서드 numb의 parameter가 one 이므로 datatype은 String. 즉, numb(String tag) 메서드 실행
}
}
'IT || 개발공부 > Spring' 카테고리의 다른 글
[Spring] Controller, Service , Repository의 역할 (0) | 2023.10.31 |
---|---|
[Spring] DI, IoC란? (0) | 2023.10.30 |
[Spring] API와 REST API (0) | 2023.10.27 |
[Spring] 오버라이딩 구현시 @Override가 필요한가 (0) | 2023.10.23 |
[Spring] 인터페이스가 가지고 있는 객체지향의 특징 (0) | 2023.10.20 |
댓글