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

  • 줄여서 OOP라고 부르기도 한다.
  • 프로그램을 어떻게 설계해야하는 지에 대한 방법론 중 하나

특징은 다음과 같다.

추상화, 캡슐화, 상속, 다형성이라는 개념이 있다.

1. 추상화는 객체 지향 프로그래밍의 핵심 개념 중 하나로, 복잡한 시스템을 단순화 하여 중요한 부분을 강조하고 불필요한 부분을 숨기는 것을 의미한다. 클래스나 프로토콜을 통해 데이터와 동작을 추상화하여 필요한 정보만을 노출시키는 것을 포함한다.

//추상화
class Account{}
struct Account {}
protocol Account {}

 

2. 캡슐화는 객체의 상태와 행동을 하나로 묶고, 외부에서 접근을 제한하여 객체 내부의 세부 구현을 숨기는 것을 의미한다. 이를 통해 객체 간의 의존성을 줄이고 코드를 보호하며 유지보수성을 높일 수 있다.

// 캡슐화
class Person{
	private var cap = "안녕" 
    
    private func doSomething1(){
    	print("메로로로롱")
    }
    private func doSomething2(){
    	print("바보바보")
    }
    
    func firstcap() {
    	print("===")
        print("cap 프린트 테스트:", cap)
        print("===")
    }
    
    func seconcap() {
    print("시이이이작")
    doSomething1()
    doSomething2()
    print("끄으으으읕")
    location = "종료"
    }
}

 

3. 상속은 기존 클래스에서 정의된 속성과 메서드를 다른 클래스에서 재사용하는 것을 말 한다. 부모 클래스의 특성을 자식 클래스가 물려받아 사용할 수 있다.

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

class Dog: Animal{
	var name = "두부"
}

let dog = Dog()
dog.species //동물
dog.name //두부

 

 

4. 다형성은 객체 지향 프로그래밍의 특징 중 하나로, 동일한 인터페이스를 가진 다른 클래스들이 각각의 방식으로 동작할 수 있는 능력을 말 한다. 다형성은 오버라이딩과 연관되어 있으며, 서로 다른 클래스들이 동일한 메서드를 호출할 때 각 클래스의 오버라이딩된 메서드가 실행된다.

  • 오버라이딩? (Overriding) : 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말 한다. 자식 클래스에서 부모 클래스의 동일한 메서드 이름을 사용하여 내용을 변경하거나 확장할 수 있다.
  • 오버로딩? (Overloading): 오버로딩은 동일한 함수나 메서드 이름을 가지지만 매개변수의 타입, 개수, 순서 등이 다른 여러 버전의 함수를 정의하는 것을 말 한다. 이를 통해 동일한 이름의 다양한 버전의 함수를 사용할 수 있다.

오버 라이딩

// 다형성

// 1. 오버라이딩

class hi{
	func greeting() {print("안녕")}
}
class cat: hi {
	override func greeting() {print("야옹")}
}
class dog: hi {
	override func greeting() {print("멍멍")}
}
class haha: hi {
	override func greeting(){
    super.greeting()
    print("우히히")
    }
}

var test: hi = hi()
test.greeting() // 안녕

test = cat() 
test.greeting() // 야옹

test = dog()
test.greeting() // 멍멍

test = haha()
test.greeting() // 안녕, 우히히

 

오버 로딩

// 오버로딩

func printParameter() {
	print("No parameter") //No parameter 출력
}

func printParameter(param: Int){
	print("Input :", param)		//Input : 1 출력
}

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

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

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

 

'Swift' 카테고리의 다른 글

기초 문법 타입 캐스팅  (1) 2024.06.12
내가 볼려고 만든 SOLID정리  (0) 2024.06.07
문법 기초 공부 (배열, 집합, 딕셔너리) 미완  (1) 2024.06.05
문법 기초 공부 (스택&큐)  (0) 2024.06.05
문법 기초 공부  (0) 2024.06.03