OOPvsFP //오버라이딩,오버로딩

JBoB·2023년 1월 30일
0

🐧OOP

OOPObject Oriented Programming 의 약자로 객체지향 프로그래밍을 뜻합니다.

OOP는 관련된 데이터끼리 묶어 class를 형성하고 그 안에서 object instance를 만듬으로써 프로그램을 디자인 해줍니다.

🐤OOP의 장점

  • OOP는 코드의 재사용률을 높이고 코드를 간결하게 함으로 유지 보수가 쉽다.
  • 데이터를 안전하게 보관할 수 있다.

🐤OOP의 특징

  1. Encapsulation (캡슐화)
  • 객체의 내부 로직을 감추고 외부에는 상대적으로 안정적인 부분만을 공개하여 데이터를 안전하게 보존하는 기법. 외부에 영향을 주지 않고 객체 내부의 구현을 변경할 수 있기 때문에 내부 로직에 대한 유연함을 제공한다.
  • 캡슐화는 데이터와 알고리즘을 하나로 묶어서 사용한다.
  • 캡슐화는 객체의 동작 구현 에 중점을 둔다.

장점

  • 데이터를 안전하게 보존가능
  • 개발자들과의 협업을 수월하게 함
  • 유지보수가 쉬움
  • 가독성이 증가
  1. Abstraction(추상화)
  • 공통점을 찾아서 Class로 묵고 복잡한 디테일을 숨기고 핵심만 추출해내는 형태이다.
  • 예를 들면, 등고선 지도를 그릴떄는 지형의 높낮이만 표현합니다. 객체들은 실제 그 모습이지만, 클래스는 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상화된 개념이다.
    다시 말하면, 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법.

장점

  • 유지보수가 쉬움
  • 가독성의 증가
  1. 상속
  • 상속이 필요한 이유는 코드의 중복을 없애기 위함입니다.
  • 부모 클래스로부터 하위 클래스는 상속을 받을 수 있다.

장점

  • 유지보수가 쉬움
  • 코드의 중복 문제를 일부 해결 할수 있다
  1. Polymorphism(다형성)
  • 같은 이름을 가진 메소드라도 각 하위 클래스의 상황에 맞게 다르게 구현될 수 있게 하는 것이다
  • 부모 클래스로부터 상속을 받은 속성에 대해, 자식 클래스에서 물려받은 속성을 재정의 할 수 있습니다.
    이것을 오버라이딩이라고 합니다.

오버라이딩

상위 클래스가 가지고 있는 멤버변수가 하위 클래스로 상속되는 것처럼 상위 클래스가 가지고 있는 메서드도 하위 클래스로 상속되어 하위 클래스에 사용할 수 있습니다. 또한, 하위 클래스에서 메서드를 재정의해서도 사용할 수 있습니다.

쉽게 말해 1.메서드의 이름이 서로 같고, 2.매개변수가 같고, 3.반환형이 같을 경우에 상속받은 메서드를 덮어쓴다고 생각하시면 됩니다. ' 부모클래스의 메서드는 무시하고, 자식 클래스의 메서드 기능을 사용하겠다'와 같습니다.

class Woman{ //부모클래스
    public String name;
    public int age;
    
    //info 메서드
    public void info(){
        System.out.println("여자의 이름은 "+name+", 나이는 "+age+"살입니다.");
    }
    
}
 
class Job extends Woman{ //Woman클래스(부모클래스)를 상속받음 : 
 
    String job;
    
    public void info() {//부모(Woman)클래스에 있는 info()메서드를 재정의
        super.info();
        System.out.println("여자의 직업은 "+job+"입니다.");
    }
}
 
public class OverTest {
 
    public static void main(String[] args) {
        
        //Job 객체 생성
        const job = new Job();
        
        //변수 설정
        job.name = "유리";
        job.age = 30;
        job.job = "프로그래머";
        
        //호출
        job.info();
        
    }
 
}
//여자의 직업은 프로게이머입니다.

Job Class(자식클래스)에서 Woman Class(부모클래스)를 상속받아 부모클래스에 있는 info()를 재정의하여 사용하였고,

메인메서드에서 Job 객체를 생성하고 호출하였기 때문에 Job클래스의 내용이 실행되었습니다.

이처럼 OOP 에서는 이러한 다형성을 허용한다.

  • 같은 이름의 함수를 여러개 정의하고,인자의 타입과 개수를 다르게 하여 파라미터에 따라 다르게 호출할 수 있게 해준다.이것을 오버로딩이라고 한다.

오버로딩

같은 이름의 메서드를 여러개 정의하고 매개변수의 유형과 개수를 다르게 하여 다양한 유형을 호출할 수 있게 해준다.

class OverloadingTest{
    //이름이 cat인 메서드
    void cat(){
        System.out.println("매개변수 없음");
    }
    
    //매개변수 int형이 2개인 cat 메서드
    void cat(int a, int b){
        System.out.println("매개변수 :"+a+", "+b);
    }
    
    //매개변수 String형이 한 개인 cat 메서드
    void cat(String c){
        System.out.println("매개변수 : "+ c);
    }
    
}
 
public class OverTest {
 
    public static void main(String[] args) {
        
        //OverloadingTest 객체 생성
        OverloadingTest ot = new OverloadingTest();
        
        //매개변수가 없는 cat() 호출
        ot.cat();
        
        //매개변수가 int형 두개인 cat() 호출
        ot.cat(20, 80);
        
        //매개변수가 String 한개인 cat() 호출
        ot.cat("오버로딩 예제입니다.");
        
    }
 
}
// 매개변수 없음
// 매개변수: 20, 80
// 매개변수: 오버로딩 예제입니다.

이처럼 이름이 cat인 메서드에 총 3개가 있지만 각각 매개변수의 유형과 개수가 다르게 호출되는 것을 오버로딩이라고 한다.

🐧FP (Functional Programmin)

side effect가 없는 pure function을 구현함으로써 프로그램을 디자인한다. 여러개의 작은 function을 엮으며 하나의 큰 function을 구현하고 불변성을 지키게 됨.

side effect : 부작용

pure function : 순수 함수

  • 동일한 인풋에는 항상 같은 값의 아웃풋을 반환해야 한다.
  • 사이드 이펙트가 없어야 한다.

장점

  • 높은 수준의 추상화를 제공한다.
  • 함수 단위의 코드 재사용이 증가한다.
  • 디버깅이 쉽다. ⇒소스 코드의 오류 또는 버그를 찾아서 수정하는 과정!!!
  • 불변성을 지향하기 떄문에 프로그램의 동작을 예측하기 쉽다. ⇒ 불변 데이터는 한번 생성되고 나면 그뒤에는 변하지 않는다.
profile
간절하고 치열하게 살자

0개의 댓글