GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Java

객체지향 활용하기

Backcoder 2023. 1. 10. 16:15

[ Object Oriented Programming 활용하기 ] 

 

[ 은닉화 ]
특히나 Entity 필드 값에 private 접근제어자를 걸어서 숨겨두고, 

직접 조작할 수 없게 할 수 있다. 
=> public 메소드로만 접근하도록 설계 
=> private 변수들은 은닉화됨 ( final 과 같이 사용 )   

 

[ 캡슐화 ] 
논리적 순서에 따라 실행되는 단계별 메소드들을 묶어서 

'캡슐화' 해서 사용할 수 있다. 

메소드 안에 메소드 넣어서 연계해서 사용 => 순서를 정해두고 사용할 수 있다. 

[ 상속 ] 
자식 생성자는 super() 을 기본값으로 해서 부모 생성자를 먼저 실행시킴 
부모생성자 실행 => 자식생성자 실행 

 

    @Override
    public void dance() {
        super.dance();
        wink(); // 추가 => / 상속 / 은닉화 된 private 메소드 사용 / 캡슐화 해서 메소드에 포함시킴 / 
    }

- default 로 모든 class 는 extends Object 하고 있다. 


[ 다형성 ] 
: 객체지향 프로그래밍의 큰 강점!
=> 자식이 부모행세를 할 수 있는 것을 이용
=> 즉, 같은 형태의 자식객체를 가지고, 

부모객체Type 으로 만들수도, 

원래 자식객체 Type 으로 만들 수도, 
Object Type 으로 만들 수도 있는 

이러한 성격이 다형성 

=> 상속해서 사용하고, 부모 형태 Type 으로 넣어두면 
부모를 상속한 여러 다른 종류의 자식 객체들을 부모Type 으로 묶어서 같이 관리할 수 있다. 


[ 추상화 ] 
public class Dancer{ } 클래스를 
public abstract class Dancer {  } 추상화 시키면 
=> interface 처럼 객체를 직접 생성할 수 없게 된다. 
=> 상속해서 사용하라는 interface 와 비슷한 역할을 하는 것 

=> abstract 클래스를 사용하는 건 interface 처럼 무조건 override를 강요하기 위한 것이기 때문에 
메소드도 abstract 메소드로 만들어서 interface 처럼 선언만 해주고 
=> 상속 => override => 정의 해서 사용 해야 의미가 있다. 


abstract class  VS  interface 
- abstract class 는 결국에 class 이기 때문에, 
- 필드(변수)도 가질 수 있고, 생성자도 가질 수 있다. 
- 다중상속 X 

- interface 는 필드도, 생성자도 가질 수 없다. 
- 메소드만 추상화해서 사용하는 용도 
=> 메소드에 default 로 public abstract 가 붙는 것 
다중상속 O 

=> 인터페이스를 여러개 만들어서 다중 상속해서 필요에 따라 override 해서 사용! 
public class IdolDancer extends Dancer implements Singer, Rapper { }

=> 다중상속이 안되는 class 문제점을 해결