Programming Paradigm : 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론
순차
, 분기
, 반복
, 참조
로 구성되며 프로그램 개발을 위해 전략을 수립해야함순수 함수
들을 블록처럼 쌓아 로직을 구현하고 고차 함수
를 통해 재사용성을 높인 프로그래밍 패러다임def sum(a,b):
return a+b
일급 객체
라는 특징을 가져야 한다. 일급 객체
- 변수나 메서드에 함수를 할당 가능
- 함수 안에 함수를 매개변수로 담기 가능
- 함수가 함수 반환 가능
객체
객체
로 취급하여 객체 내부에 선언된 메서드
를 활용하는 방식객체지향 프로그래밍 특징 4가지
- 추상화(abstraction)
- 클래스들의 공통적인 특성(변수, 메서드)들을 묶어 표현
- 캡슐화(encapsulation)
- 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것.
- 캡슐화 방법
- 접근 제어자 사용(
private
)getter
,setter
등 메서드를 통해서만 간접적으로 접근 허용- 상속성(inheritance)
- 상위 클래스의 특성을 하위 클래스가 이어받아 재사용하거나 추가, 확장하는 것
- 코드 재사용성, 계층적 관계 생성, 유지 보수성 측면에서 중요
- 다형성(polymorphism)
- 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것
- 오버로딩, 오버라이딩
오버로딩과 오버라이딩
- 오버로딩(overloading)
- 같은 이름을 가진 메서드를 여러 개 두는 것
- 메서드 타입, 매개변수 유형, 개수 등으로 여러 개 두기 가능
- 컴파일 중에 발생하는 정적 다형성
class Person{ public void eat(String a) { System.out.println("I eat " + a); public void eat(String a, String b) { System.out.println("I eat " + a + " and " + b); } public class CalculateArea{ public static void main(String[] args) { Person a = new Person(); a.eat ("apple"); a.eat("tomato", "phodo"); /* I eat apple I eat tomato and phodo */
- 매개변수의 개수에 따라 다른 함수가 호출됨 !!
- 오버라이딩(overriding)
- 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의
- 런타임 중에 발생하는 동적 다형성
class Animal{ public void bark() { System.out.println("mumu! mumu!"); } } class Dog extends Animal { @Override public void bark() { System.out.println("wal!!! wal!! !"); } } public class Main{ public static void main(String[] args) { Dog d = new Dog(); d.bark(); } } /* wal!!! wal!!! */
- 자식 클래스 기반으로 메서드가 재정의돼서
wal!!! wal!!!
이 출력
객체지향 설계 원칙 5가지 (SOLID)
- 단일 책임 원칙(SRP, Single Responsibility Principle)
- 한 클래스는 하나의 책임만 져야 한다.
- 개방-폐쇄 원칙(OCP, Open Closed Principle)
- 확장에는 열려있고 변경에는 닫혀 있어야 한다.
- 리스코프 치환 원칙(LSP, Liskov Substitution Principle)
- 상위 타입 객체를 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 객체로 바꿀 수 있어야 한다.
- ex) 포유류 객체가 강아지 객체의 상위 클래스일 때, 포유류 객체와 강아지 객체가 바뀌어도 상관이 없어야 함
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙
- 하나의 일반적인 인터페이스보다 구체적인 여러 인터페이스를 만들어야 함
- 클라이언트별로 세분화된 인터페이스를 만들고 클라이언트는 사용하지 않는 메서드를 구현하지 않도록 주의
- 의존성 역전 원칙 (DIP, Dependency Inversion Principle)
- 상위 모듈은 하위 모듈의 구현에 의존해선x.
- 구체적인 것은 추상화에 의존해야 한다.
- 구체화에 의존x. 추상화에 의존
https://velog.io/@codenmh0822/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84
https://xangmin.tistory.com/152