• Home
  • About
    • Lim Gun Woo photo

      Lim Gun Woo

      slowly, clamly

    • Learn More
    • Email
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

[Siwft] - 6 - OOP

03 Oct 2018

Reading time ~2 minutes

OOP ( Object-Oriented Programming )

  • 객체지향 프로그래밍 ( oop ) 이란 캡슐화, 다형성, 상속 을 이용하여 코드의 재사용을 증가시키고, 유지보수를 감소시키는 장점을 얻기 위해서 객체들을 연결시켜 프로그래밍 하는 것

객체의 구성

class kermit{
	var color : String = "green" // 데이터 (상태)
	func eat(){ // 메소드 (행위, 동작)
	
	}
}

  • 객체 : 데이터(상태) + 메소드(행위, 동작)

  • 함수와 메소드의 차이

    • 함수 : 한 줄 이상의 명령어를 스코프 내에서 실행, 특정 작업을 수행, 독립된 기능을 수행하는 단위
    • 메소드 : 멤버 함수 , 클래스 안에서 사용하는 함수, 클래스 데이터 타입에 의존적

Class 와 Object

class Dog{
	var color : String!
	var eye Color : String!
	func sit(){ 
	
	}
}

let kermit : Dog = Dog()
kermit.color = "green"
kermit.sit()

  • class : 추상적인 단계, 틀, 구조 ex) 타꼬야끼 틀
  • object : 실체, class의 구현 ex) 매운 타꼬야끼, 치즈 타꼬야끼

4대 특징

Abstraction (추상화)
protocol Human {
	var name: String { get }
	var age: Int { get }
	var gender: String { get }
	var height: Double { get }
	func sleep()
	func eat()
	func walk()
}

  • 대상의 불필요한 부분을 무시하여 복잡성을 줄이고 목적에 집중할 수 있도록 단순화 시키는 것 ( 디자인 레벨)
Encapsulation (캡슐화)
class Person{
	private birthday : Int = 950228
	
	private func study(){
		code
	}
	func goSchool(){
		study()
	}
}

  • 구현 레벨
  • 데이터 은닉화 : 연관된 상태와 행동으로 하나의 단위( 객체 ) 로 캡슐화
  • 정보 은닉화 : 외부에 알릴 정보만 알리고 보안을 위한 정보는 숨김
Inheritance (상속)
class car{
	var wheel : Int = 4
	func move(){
	}
	func stop(){
	}
}
class autoCar : car {
		
}
class  manualCar: car {

}
final class bus : manualCar {

}

  • 하나의 클래스( 부모 클래스)를 다른 클래스가 상속받아 부모클래스의 속성과 기능을 동일하게 사용하는 것
  • 재사용과 확장성 때문에
  • swift 에서는 다중 상속을 비허용
  • final 은 선언한 클래스를 상속 못하게 하는 메소드
Polymorphism (다형성)
  • 동일한 요청에 대해 각각 다른 방식으로 응답할 수 있도록 만드는 것
  • Overriding (오버라이딩)
    • 상위 클래스의 메소드를 재정의 하여 사용
    • 동일 요청이 객체에 따라 다르게 응답
    • super 메소드는 부모클래스의 함수르 호출하여 사용
class Shape{
	var color = UIColor.black
	init(color:UIColor){
		self.color=color
	}
	func draw(){
		print("draw shape")
	}
}

class Rectangle : Shape{
	override var color : UIColor{
	get {
		return UIColor.red
	}
	set{
		self.color = UIColor.red
	}
	override func draw(){
		super.draw()
	
		print("draw rect")
	}
}
	
let rect = Rectangle(color: UIColor.blue)
rect.draw()

  • Overloading (오버로딩)
    • 동일한 이름의 메소드가 매개변수의 이름, 타입, 개수에 따라 다르게 동작
class circle{	   
	var radius : Int = 0
	var color : UIColor
	init(){
		self.radius = 10
		self.color = UIColor.black
	}
	func getCircle(){
		self.radius = 10
		self.color = UIColor.black
	}
	func getCircle(_ :Int = 10,color:UIColor){
		self.radius = 10
		self.color = color
	}
	func getCircle(radius : Int,_ :UIColor=UIColor.black){
		self.radius=radius
		self.color = UIColor.black
	}
	func getCircle(radius:Int,color:UIColor){
		self.radius=radius
		self.color=color
	}
}
var newCircle = circle()

newCircle.getCircle()
newCircle.getCircle(color: UIColor.brown)
newCircle.getCircle(radius: 20)
newCircle.getCircle(radius: 30, color: UIColor.red)
	


swiftplayground Share Tweet +1