dev._.note

[Swift] 객체지향(OOP/Object-Oriented-Programming) 본문

Dev/SWIFT

[Swift] 객체지향(OOP/Object-Oriented-Programming)

Laena 2023. 11. 29. 15:23

📌 객체지향 프로그래밍(Object-Oriented-Programming)

 

[JAVA] 객체지향(Object oriented)

객체지향 언어란? 현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며, 발생하는 모든 사건들은 객체간의 상호 작용이다. 이 개념을 컴퓨터로 옮겨 만들어낸 것

how-mrk.tistory.com

 

  • 프로그램을 어떻게 설계해야하는 지에 대한 방법론 중 하나(패러다임)
  • About ‘객체’
    • 객체란 쉽게 말하자면 ‘대상을 나타내는 단어’
    • 각 객체와 그 객체들간의 관계를 설계하는 것이 ‘객체 지향 프로그래밍’

 

📌 OOP의 특징

 

[JAVA] 객체지향의 3대 요소 & 5대 원칙

* 3대 요소 1. 캡슐화(Encapsulation) = 정보은닉 캡슐화란? - 추상화를 통해 정의된 데이터들과 기능을 하나로 묶어 관리하는 기법. - 클래스의 가장 중요한 목적인 데이터의 접근제한을 원칙으로 하

how-mrk.tistory.com

  • 추상화, 캡슐화, 상속, 다형성이라는 4가지의 개념이 있습니다
  1. 추상화 (Abstraction): 추상화는 객체 지향 프로그래밍의 핵심 개념 중 하나로, 복잡한 시스템을 단순화하여 중요한 부분을 강조하고 불필요한 부분을 숨기는 것을 의미. 클래스나 프로토콜을 통해 데이터와 동작을 추상화하여 필요한 정보만을 노출시키는 것을 포함.
  2. 캡슐화 (Encapsulation): 캡슐화는 객체의 상태(데이터)와 행동(메서드)를 하나로 묶고, 외부에서의 접근을 제한하여 객체 내부의 세부 구현을 숨기는 것을 의미. 이를 통해 객체 간의 의존성을 줄이고 코드를 보호하며 유지보수성을 높일 수 있음.
  3. 상속 (Inheritance): 상속은 기존 클래스에서 정의된 속성과 메서드를 다른 클래스에서 재사용하는 것을 말함. 부모 클래스(상위 클래스, 슈퍼 클래스)의 특성을 자식 클래스(하위 클래스, 서브 클래스)가 물려받아 사용할 수 있음.
  4. 다형성 (Polymorphism): 다형성은 객체 지향 프로그래밍의 특징 중 하나로, 동일한 인터페이스를 가진 다른 클래스들이 각각의 방식으로 동작할 수 있는 능력을 말함. 다형성은 오버라이딩과 연관되어 있으며, 서로 다른 클래스들이 동일한 메서드를 호출할 때 각 클래스의 오버라이딩된 메서드가 실행.
    • 오버라이딩 (Overriding): 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말함. 자식 클래스에서 부모 클래스의 동일한 메서드 이름을 사용하여 내용을 변경하거나 확장가능.
    • 오버로딩 (Overloading): 오버로딩은 동일한 함수나 메서드 이름을 가지지만 매개변수의 타입, 개수, 순서 등이 다른 여러 버전의 함수를 정의하는 것을 말함. 이를 통해 동일한 이름의 다양한 버전의 함수를 사용가능.
// 추상화 - 이렇게 타입을 정의하는 것
class Account {}
struct Account {}
protocol Account {}

// 캡슐화
class Person {
  private var location = "서울"

  private func doSomething1() {
    print("잠시 휴게소에 들려서 딴짓")
  }
  private func doSomething2() {
    print("한숨 자다 가기")
  }

  func currentLocation() {
    print("====")
    print("현재 위치 :", location)
    print("====")
  }

  func goToBusan() {
    print("서울을 출발합니다.")
    doSomething1()
    doSomething2()
    print("부산에 도착했습니다.")
    location = "부산"
  }
}

// 상속
class Animal {
	var species = "동물"
}

class Dog: Animal {
	var name = "초코"
}

let dog = Dog()
dog.species // 동물
dog.name // 초코


// 다형성

1) 오버라이딩

class Dog {
  func bark() { print("멍멍") }
}
class Poodle: Dog {
  override func bark() { print("왈왈") }
}
class Husky: Dog {
  override func bark() { print("으르르") }
}
class Bulldog: Dog {
  override func bark() {
    super.bark()
    print("bowwow")
  }
}

var dog: Dog = Dog()
dog.bark() // 멍멍

dog = Poodle()
dog.bark() // 왈왈

dog = Husky()
dog.bark() // 으르르

dog = Bulldog()
dog.bark() // 멍멍, bowwow


2) 오버로딩
// 함수를 식별할 땐 단순히 함수 이름을 보고 하는 게 아니라
// 함수 이름, 파라미터(타입, 갯수, Argument Label), 리턴타입을 모두 종합해서 함수를 식별
func printParameter() {
  print("No param")
}

func printParameter(param: Int) {
  print("Input :", param)
}

func printParameter(_ param: Int) -> Int {
  print("Input :", param)
	return param
}

func printParameter(_ param: Int) -> Double {
  print("Input :", param)
	return Double(param)
}

printParameter()
printParameter(param: 1)
let int: Int = printParameter(2)
let double: Double = printParameter(2)

'Dev > SWIFT' 카테고리의 다른 글

[Swift] Class와 Struct, Enum  (0) 2023.11.30
[Swift] radix  (0) 2023.11.29
[Swift] Array와 Set, Dictionary  (1) 2023.11.29
[Swift] Queue와 Stack  (0) 2023.11.29
[Swift] 연산자, 조건문과 반복문  (1) 2023.11.28