객체 지향 프로그래밍(OOP) / 접근 제어자 / 상속

비지·2023년 10월 12일
0

엘트

목록 보기
11/16

객체 지향 프로그래밍(OOP)

  • OOP는 컴퓨터 프로그램을 객체(Object)의 모임으로 파악하려는 프로그래밍 패러다임이다.
  • 객체(Object)들은 서로 메시지를 주고 받을 수 있으며 데이터를 처리할 수 있다.

객체 지향 프로그래밍(OOP)의 장점

  • 프로그램을 유연하고 변경이 용이하게 만든다.
  • 프로그램의 개발과 보수를 간편하게 만든다.
  • 직관적인 코드 분석을 가능하게 한다.
  • 객체 지향 프로그래밍의 중요한 특성
    강한 응집력(Strong Cohesion)약한 결합력(Weak Coupling)을 지향한다.

Class의 용어 설명

  • 클래스의 요소
    멤버(member)
    필드(field)
    생성자(constructor)
    메소드(method)
  • 인스턴스(instance) : new 연산자에 의해서 생성된 객체

Class 생성하기

  • new를 사용하여 Person 클래스의 인스턴스를 생성한다.
  • Person class의 멤버는 name, constructor, say()가 있다.
  • 클래스 안에서 "this."를 앞에 붙이면 클래스의 멤버를 의미한다.
class Person {
	name: string;
    constructor(name: string) {
    this.name = name;
    }
    say() {
    return "Hello, My name is " + this.name;
    }
 }

let person = new Person("june");

접근 제어자

  • 속성 또는 메소드로의 접근을 제한하기 위해 사용한다.
  • TypeScript에는 3종류의 접근 제어자가 존재한다.
  • public > protected > private
  • Java와 다르게 package 개념이 없어 default 접근 제어자는 존재하지 않는다.

접근 제어자 (public)

  • 프로그램 내에서 선언된 멤버들이 자유롭게 접근할 수 있다.
  • TypeScript에서 멤버는 기본적으로 public으로 선언된다.
  • 명시적으로 멤버를 public으로 표시할 수도 있다.
class Animal {
	public name: string
    constructor(theName: string) {
		this.name = theName;
      }
   }
new Animal("Cat").name;

접근 제어자 (private)

  • 멤버가 포함된 클래스 외부에서의 접근을 막는다.
class Animal {
	private name: string
    constructor(theName: string) {
	this.name= theName;
   }
}
new Animal("Cat").name //Erorr:Property'name' is private and only accessible within class 'Animal'

상속

  • OOP는 상속을 이용하여 존재하는 클래스를 확장해 새로운 클래스를 생성할 수 있다.
  • extends 키워드로 Animal이라는 기초 클래스에서 Dog 클래스가 파생되었다.
  • 파생된 클래스는 하위클래스(subclass), 기초 클래스는 상위클래스 (superclass)라고 부른다.
  • Dog, Cat은 Animal의 기능 (move메소드)을 확장하기 때문에, move()와 makeDound()를 가진 인스턴스를 생성한다.
class Animal {
	move(distanceInMeters: number) {
    console.log(`Animal moved ${distanceInMeters}m.`);
   }
}

class Dog extends Animal {
	makeSound() {
    console.log("멍멍!");
  }
}
class Cat extends Animal {
	makeSound() {
    console.log("야옹!");
  }
}
const dog = new Dog();
dog.move(10);
dog.makeSound();

const cat = new Cat();
cat.move(5);
cat.makeSound();

접근 제어자 (protected)

  • 멤버가 포함된 클래스와 그 하위 클래스 외부에서의 접근을 막는다.
  • Person에서 파생된 Employee의 인스턴스 메소드에서는 name을 사용할 수 있다.
profile
나를 위한 업그레이드 아자아자

0개의 댓글