2.컴퓨터 사이언스 CS 지식 (객체지향 프로그래밍 OOP)

vlsxm·2022년 11월 20일
0

CS 지식

목록 보기
2/2

객체지향 프로그래밍

객체지향 프로그래밍(OOP Objet-Oriented Programming)

객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여
내부에 선언된 메소드를 활용하는 방식의 프로그래밍

설계에 시간이 많이 소용되며 처리 속도가 상대적으로 느리다는 단점이 존재

객체 (Objet)

물리적으로 존재하거나 추상적으로 생각할수 있는 것 중에서 자신이 속성을 지니며 식별이 가능한 것

  • 속성(필드(field) + 동작(메소드(method)로 구성된다

물리적 객체는 컴퓨터를 예를 들 수 있으며
추상적 객체는 컴퓨터에 들어가는 CPU의 제조회사를 예를 들 수 있습니다

클래스 (Class)

자바의 설계도 라고 하며 객체를 만들어 내기 위한 틀입니다
클래스도 객체와 똑같이 속성(필드(field) + 동작(메소드(method)으로 이루어져 있습니다

인스턴스 (Instance)

클래스로부터 생성된 객체를 인스턴스라고 합니다 -> (인스턴스화)
이렇게 생성된 객체는 메모리 힙 영역에 할당 되게 됩니다

OOP의 특징

객체지향 프로그래밍의 특징은 추상화,캡슐화,상속,다형성이 있습니다

추상화(Abstraction)

복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것

캡슐화(Encapsulation)

객체의 속성과 메소드를 하나로 묶어 일부는 외부에 감추어 은닉하는 것

다형성(Polymorphism)

하나의 메소드나 클래스가 다양한 방법으로 동작하는 것

  • 오버로딩 (Overloading)
    같은 이름을 가진 메소드를 여러 개 선언하는 것
    매소드의 타입,매개변수의 유형,개수 등을 다르게 하여 선언 할수 있습니다
public class Calculator {
	
	public int add(int a,int b) {
		return a+b;
	}
	
	public int add(int a,int b,int c) {
		return a+b+c;
	}

	public static void main(String[] args) {
		
		Calculator calculator = new Calculator();
		
		System.out.println(calculator.add(5, 10)); // 15
		System.out.println(calculator.add(10, 15, 20)); // 45
	}
}
  • 오버라이딩 (Overrriding)
    상위 클래스로부터 상속받은 메소드를 하위 클래스에서 재정의 하는 것
public class Calculator {
	
	public int add(int a,int b) {
		return a+b;
	}

	public static void main(String[] args) {
		
		Test test = new Test();
		
		System.out.println(test.add(5, 10)); // 25
	}

}

class Test extends Calculator{
	
	@Override //Override 어노테이션 
	public int add(int a,int b) {
		return a+b+10; 
	}
}

설계 원칙

객체지향의 프로그래밍 설계를 할때는 SOLID 원칙을 지켜야 합니다

S = 단일 책임 원칙
O= 개방-폐쇄 원칙
L = 리스코프 치환 원칙
I = 인터페이스 분리 원칙
D = 의존 역전 원칙

단일 책임 원칙(SRP Single Responsibility Principle)

모든 클래스는 각각 하나의 책임만 가져야 하는 원칙이며 클래스를 변경하는 이유는 단 하나여야 한다
하나의 클래스에 두 개의 책임이 있다면 두 개의 클래스로 분리하여 변경하는 이유를 하나로 만들도록 설계

계방-폐쇄 원칙(OCP Open Closed Principle)

코드를 쉽게 확장(상속) 할수 있도록 하며 수정할 때는 닫혀 있어야 하는 원칙
변하는 것(확장)과 변하지 않는 것(폐쇄)을 구분하여 확장은 쉽게 할수 있도록 하며
폐쇄는 변화에 영향을 받지 않도록 설계해야 한다

리스코프 교체의 원칙(LSP Liskov Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 변경할수 있는것
부모 객체에 자식 객체를 넣어도 문제없이 돌아가는 시스템을 만드는것

인터페이스 분리 원칙(ISP Interface Segregation Principle)

하나의 인터페이스 보다 구체적인 여러 개의 인터페이스를 만드는 원칙
클래스는 사용자에게 필요한 메소드를 갖는 인터페이스를 제공해야 한다

의존 관계 역전의 원칙(DIP Dependency Inversion Principle)

추상화된 인터페이스 또는 상위 클래스를 두어 변하기 쉬운 것에 변화에 영향을 받지않도록 하는 원칙
상위 계층은 하위 계층의 변황 대한 구현으로부터 독립해야 한다

profile
여러가지 하는 백엔드 개발자

0개의 댓글