'Study/Iphone_SDK'에 해당되는 글 3건

  1. 2009.10.13 CBS Outdoor
  2. 2009.02.15 아이튠즈 미국계정만들기
  3. 2009.01.13 OOP의 3개의 기둥 Encapsulation , Inheritance , Polymorlphism
Study/Iphone_SDK2009. 10. 13. 11:53



어플리케이션 활용 영역이 외부로 확장되고 있다.

기술의 발전이 타 영역의 혁신을 불러오는 사례...
통합적인 사고없이는 새로움에 대응하기 어려운 시대가 도래하였다.
Posted by chacolina
Study/Iphone_SDK2009. 2. 15. 03:22
아이튠즈 미국계정 만들기(1) (미국계정생성) 클릭
아이튠즈 미국계정 만들기(2) (한국카드결제) 클릭

우리나라 계정으로는 사용상 제약이 많기 때문에 미국계정을 사용하는 것이 좋다.
문제없이 미국계정을 만들려면 몇가지 단계가 필요한데 위의 블로그를 방문하면 상세하게 기술되어있다.
Posted by chacolina
Study/Iphone_SDK2009. 1. 13. 17:52

OOP의 3개의 기둥  Encapsulation , Inheritance , Polymorlphism

1. Encapsulation - 클래스 내부의 정보를 외부에서 감춘다
2. Inheritance - 상속, 중복된 코드를 최대한 제거한다.
3. Polymorphism - 중복제거를 위해서 상속을 받았는데 , 파생된 클래스는 같은 이름의 메소드로 다른 행동을 하고 싶다.


1. Encapsulation
캡슐화의 최대의 목적은 클래스의 내부의 내용이나 구현을 외부에게 감추어라, 이다.  왜? 클래스 내부의 구현을 외부에 감추어야 할까? 클래스란 실세계 오브젝트가 추상화된 개체이다.
집 이라는 클래스 개체에 '출입문번호'라는 개체가 있을때 , 그 집에 사는 사람(클래스 내부의 멤버)는 출입문 번호를 알아야할 필요가 있지만, 대한민국의 모든 사람이 우리집의 출입문 번호를 알게 된다면 , 우리집이 안전해 지지 않는다.

하지만, 클래스는 다른 클래스와 이야기를 할 필요가 있다. 예를 들어 친구가 집에 놀러 왔는데 나는 밖에 있다. 친구는 우리집 '출입문번호'를 알고 있을 필요가 없지만, 집에 들어가서 기다리라고 말할때에는 친구에게 번호를 가르쳐 줄수가 있어야 한다.
이럴때에 인터페이스의 한가지 인 public 한정자로 외부에 정보를 공개하는 것이다.

다시 정리를 하자면, 클래스에서 일을 하기 위해서는 멤버변수(field)가 있어야 하며, 기본적으로 private으로 사용한다. (C#에서 한정자를 정의 하지 않으면 기본값이 private인 이유가 바로 이 때문이다.)
외부에 정보를 공개해야할 필요가 있다면 public 한정자의 property의 get, set을 이용하여, 외부에 노출하면 된다.

그럼, 행동(method)의 경우에는 어떨까, '나'라는 클래스가 있을 때 , '화장실에간다' 라는 메소드가 있다고 가정하자, '화장실에간다'라는 method를 외부에서는 알필요가 없다, 나의 내부의 행동을 정의 하는 것을 private 한정자로 외부로 부터 감춘다.
외부에서 '나'에게 말을 걸어야 할 필요가 있다면, 이는 public method로 선언 되어야 할 것이다.

클래스 내부의 메소드들 사이에서도 서로가 알아야할 필요가 없다면, 서로가 모르게 하는 것이 내부 구현의 수정에 더욱 용이하다.


2. Inheritance
여러개의 객체를 정의하다보면 , 거의 같은 멤버변수와 멤버메소드를 가지는 클래스가 생겨 날 수 있다.
이런 경우에 중복(duplicate) 코드가 많이 생성되게 되며, 이는 나중에 유지관리 하게 될대, 또는 구현이 변경될 때 장애물이 된다.
이런 경우를 제거하기 위해 중복 변수나, 메소드를 상속으로 생성한다.
상 속을 이용하면 클래스의 일관성 유지에도 도움이 된다.  주의할 점, 상속은 코드 중복을 제거하고, 구조를 일관성 있게 가져가는 중요한 도구이지만, 파생관계가 명확하지 않은 객체에 상속을 적용하면, 관리할수 없을 정도로 복잡성이 높아진다.
상속을 사용할때에는 생각보다 많은 검토가 필요하다.

3. Polymorphism
 다형성은 같은 형태의 객체가 여러가지 형태의 모습으로 작동한다, 는 뜻이다. 언뜻 이해하기가 어려운데, 부모 클래스가 있고, 상속을 받아 구현된 클래스들이 있다면, run-time 시에 인스턴스를 서로 교환해서 일을 할수가 있다.
이를 외부에서 볼때에는 같은 클래스 인스턴스로 보이는 녀석이 다른 녀석으로 바뀌어 있는 것이 된다.

class Car{
protected int speed;
public void Start()
{
 //시동을 건다.
}

public void Stop()
{ // 시동을 끝다.}

// 기본 Car 클래스는 속도가 5씩 증가 된다.
public void SpeeedUp(){ speed+=5;}

}


//상속 받은 SportsCar 는 속력이 10씩 증가한다.
class SportsCar:Car
{
public new override SpeedUp(){ speed+=10;}
}

//상속 받은 Truck은 속력이 2씩 증가한다.
class Truck:Car
{
public new override SpeedUp(){ speed+=2;}
}

SportsCar와 Truck은 speed 멤버와 , Start(), Stop()을 명시적으로 코딩하지 않았지만  Car로 부터 상속받음으로써 명시적으로 코딩한 것과 같다.

하지만 빠른 스포츠카는 SpeedUp()이 실행될때 Car로 부터 생성된 인스턴스와는 다르게 속력이 10씩 증가하며, 느린 Truck은 가속페달을 밟을 때 2씩 증가 한다.


이처럼 위의 3가지는 OOP를 구현하는 강력한 도구이다. 이 도구를 적절하게 이용하는 방법은 계속되는 포스트에서 알아보자 ^^

Posted by chacolina