OOP란?

9999·2022년 1월 30일
0

CS

목록 보기
16/19

탄생배경


하드웨어 성능이 폭발적으로 성장하면서 소프트웨어에서 요구되는 기술이 점점 복잡하고 거대해지고 있습니다. 기존의 전통적인 절차지향 방법으로는 많은 어려움을 겪었습니다.

이러한 문제를 해결하기 위해 함수단위로 나누어 구조화하는 구조적 프로그래밍 방법이 대두되었습니다. 하지만 이러한 방법은 데이터를 처리하는 부분은 구조화할 수 있지만 데이터 자체는 구조화하지 못해 전역 네임스페이스 포화 문제(이름 짓기)를 야기합니다. 또한 데이터 상태에 따라 다르게 동작하는 함수들이 많아지면서 변수를 추적하는 것이 프로그램의 규모가 커질수록 어려워졌습니다.

{ Object-Oriented Programming }

이러한 문제를 해결하기 위해 객체지향 프로그래밍(Object-Oriented Programming)이 등장합니다.

객체지향은 큰 문제를 작게 쪼개는 방식이 아니라 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 조합해서 큰 문제를 해결하는 Bottom-up 방식을 지향합니다.

각각의 객체들은 독립적으로 운용이 가능하며 접근이 가능한 인터페이스를 제한하여 잘못 사용되어지는 경우를 최소화 할 수 있습니다.

특징


캡슐화(Encapsulation)

  • 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 의미.
  • 특정한 변수와 메서드를 관련성있게 클래스에 구성해야 함.
public class dog {
	name = 'cookie',
	size = 'middle',
	const shout = function() {
		console.log('wal! wal!');
		}
}
// public -> anyone 
// private -> safe
  • 캡슐화를 하는 중요한 목적은 정보은닉이다.
  • public으로 선언한다면 누구나 접근 가능하지만 private으로 해놓는다면 데이터보호가 가능하다.
  • 캡슐화를 해서 정보은닉이라는 장점이 생긴 것이지 “캡슐화 == 정보은닉”이란 개념은 아니다.
  • 사용자 입장에서는 public으로 정의된 속성만 봐도 무방함.

추상화(Abstraction)

  • 목적과 관련없는 부분을 제거하고 필요한 부분만 표현하는 개념.
  • 공통적인 요소나 특징을 모아놓는 과정.
// 강아지나 고양이의 공통적인 부분만 추상화한 클래스.
public class animal {
	head = 1, // 머리는 하나
	leg = 4, // 다리는 4개
	ear = 2, // 귀는 2개
	nose = 1, // ...이런식
	tail = 1,
	function shout(shout) {
		console.log(shout);
	}
// ...etc
}
  • 위 코드같이 동물의 공통점을 모아서 클래스로 만든 것을 추상클래스라고 함.

다형성(Polymorphism)

  • 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해줌.
  • 형태는 같은데 리턴값은 다른것을 의미.

class dog extends animal {
	shout = animal.shout("wal wal");
// 출력.. wal wal 
}

class cat extends animal {
	shout = animal.shout("meow meow");
// 출력.. meow meow
}
  • shout()라는 같은 함수를 사용하는데 강아지는 “wal wal”을 출력하고 고양이는 “meow meow”를 출력한다.
  • 이렇게 같은 형태를 재사용하여 코드의 유지보수가 용이하도록 도와줌.

이렇게 다형성을 사용하려면 오버라이딩과 오버로딩을 사용해야 한다.

오버라이딩(Overriding)

  • 부모 클래스에서 자식에게 상속하여 자식 클래스에서 자기 입맛대로 바꾸어 재사용하는 것을 의미.
  • extends 해서 사용가능한 메서드를 확장하여 사용함.

오버로딩(Overloading)

  • 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념.
class overLoading {
  function over() {
    console.log("Hello World");
  }
  function over(name) {
    console.log("my name is" + name);
  }
  function over(name, age) {
    console.log(`my name is ${name} and my age ${age}`);
  }
}
  • 같은 함수라도 다양한 기능 수행과 처리, 결과를 낳을 수 있다.

이처럼 다형성은 같은 이름을 사용하여 메서드 이름을 낭비하지 않아도 되고 복잡하게 API를 늘릴 필요가 없게 만들어준다.

상속성

  • 객체지향 프로그래밍의 주된 기능으로 클래시간 부모와 자식 관계를 만드는 장본인.
  • 코드 중복을 없애기 위해 반드시 필요한 개념.
  • 방대한 클래스를 하나 만들어 놓으면 extends할 클래스에 그냥 클래스 명만 붙여넣기만 하면 됨. → 유지보수 용이, 비용 절감.

잘못된 표현이 있으면 댓글 달아주세요

Reference

0개의 댓글