객체지향 방법이란?실세계의 개체(Entity)를 데이터와 함수를 결합된 형태로 객체를 표현하는 개념으로객체들이 메시지(message)를 주고받음으로써 원하는 결과를 얻는다.각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드로 구성된다.1) 절차 중심 방법● 소프트웨어 위기 발생 : 낮은 생산성, 납기 지연, 경영환경의 변화● 소프트웨어의 복잡성 증가 :① 시스템의 규모가 커지면서 시스템 전체를 이해하는 것은 불가능해짐② 기존 소프트웨어는 반드시 유지보수가 필요하며, 원래의 개발자만이 빠르게 유지보수 가능③ 소프트에어는 계속 진화되면서 확장됨● 위험 관리 실패 가능성 증가:① 전통적인 하향식 개발 방법인 Waterfall 방법은 문제 발견이 늦을 수 있음② 시스템은 생명주기 최종 단계가 끝나기 전에는 수행할 수 없음● 규칙의 혼선발생 :① 사용자요구 조사시 사용자는 명확한 요구 사항제시미흡② 시스템 개발시 짧은 개발주기와 더 많은 융통성을 사용자는 원함③ 사용자의 초기 요구 사항에 대한 반영이 대체로 빈약함결론적으로,- 기능 중심, 변경에 대한 파급 효과가 큼- 프로그램은 자료 구조와 관련 함수의 결합으로 이루어짐2) 객체지향 방법- 객체지향 방법은 자료 중심 모델임- 객체는 자료와 관련 함수의 결합으로 이루어짐- 프로그램은 객체들의 집합으로 이루어짐객체지향의 장점은?① 문제를 쉽고 자연스럽게 프로그램화(모델링) 할 수 있다.② 현실세계의 사고방식을 그대로 적용함으로 현실세계의 문제를 자연스럽게 표현이 가능하다.③ 쉬운 프로그램의 개발로 인한 생산성 향상을 가져 올 수 있다.④ 프로그램 모듈을 재사용 할 수 있다.⑤ 프로그램의 확장 및 유지 보수가 용이하다.⑥ 대규모 복잡한 시스템에 효율적이다.? 객체(object)1.객체- 효율적으로 정보를 관리하기 위하여, 사람들이 의미를 부여하고 분류하는 논리적인 (개념적인) 단위-실세계에 존재하는 하나의 단위에 대한 소프트웨어적 표현2. 객체의 구성속성의 값을 나타내는 데이터 + 데이터를 변경하거나 조작할 수 있는 메소드? 객체의 상태: 현재 객체가 어떤 상황에 있으며 객체의 특성은 어떤 것이 있는지 에 대한 상태가 들어있다.ex) 볼펜을 예로 들어서 설명하면 볼펜의 상표, 남은 잉크의 양, 잉크의 색깔등이 객체의 상태가 될 것이다. 객체지향 언어에서는 이것을 멤버 변수,속성 등으로 표현한다.? 객체가 할 수 있는 일 : 객체가 할 수 있는 일들을 표시할 수 있다.ex) 위의 예처럼 볼펜을 중심으로 살펴보면 쓰기라는 일을 할 수 있는 기능이있다고 볼 수 있다. 객체지향에서는 이러한 것을 멤버 함수 또는 메소드등으로 표현한다.? 클래스(Class)① 객체는 항상 클래스로부터 생성됩니다. 즉 클래스는 객체를 생성하는 형판(template) 이라고 할 수 있습니다.② 클래스는 두 개의 구성요소(member)인 자료구조(필드)와 연산(메소드)를 가집니다.그리고, 클래스로부터 생성된 객체를 instance라 합니다. 즉, 실체를 말하는 것입니다.③ 정보처리의 주체는 클래스가 아니라 객체입니다.예를 들어 집 지을 때 벽돌을 쓰지 벽돌틀을 쓰지는 않는다는 것과 같은 이치입니다.④ 클래스에서 객체 생성의 예 - 여러 객체들이 만들어집니다. 속성은 같지만 데이터는 서로 다릅니다. 즉, 겉모습은 같지만 내용은 다르다는 것입니다.? 클래스와 객체의 관계? 상속의 개념? 상속(inheritance)① 상속관계의 클래스들은 계층구조를 구성할 수 있습니다.자바의 API 문서를 보시면 나오듯이 각 클래스들은 대개 계층구조 혹은 트리구조를 가지고 있습니다. 이런 구조 덕에 재사용이 가능합니다.② 이미 다른 클래스에 구현되어 있는 부분을 다시 구현할 필요 없이 상위 클래스(Super class)에 모든 요소를 상속 받고 추가적으로 필요로 하는 새로운 자료구조와 메소드를 추가하여 하위 계층의 클래스(Sub class)를 생성하는 것입니다.③ 상속의 개념을 이용하여 소프트웨어의 재사용(reusing)을 지원합니다.④ 클래스의 계층구조새로운 클래스를 생성할 때 기존 클래스의 하위 클래스를 선언할 수 있습니다. 새로운 클래스에 속성이나 메소드를 추가하여 기존 클래스를 확장할 수도 있습니다.이런 식으로 해서 클래스들은 계층구조를 이루게 됩니다.이렇게 상속은 결국 모듈의 재사용을 위한 장치이며 객체지향프로그램에 있어 아주 중요한 개념입니다.? 캡슐화(encapsulation)① 객체를 캡슐화 하여 What만 보여주고 How는 감추는 작업② 객체를 작성(생성)할 때는 숨겨야(private) 하는 정보와 공개해야(public) 하는 정보를 구분해서 작성해야 한다. 객체의 사용자는 그 기능만 알고 사용하며 어떻게 처리되는 지는 은폐되어야 하는 것이다.( Information hiding )③ 그러면 캡슐화의 장점은?- 객체에 포함된 정보의 손상과 오용을 막을 수 있다.- 객체의 조작 방법이 바뀌어도 사용방법은 바뀌지 않는다.- 바뀌어도 다른 객체에 영향을 주지 않아 독립성이 유지된다.- 처리된 결과만 사용하므로 객체의 이식성이 좋다.- 객체를 부품화 할 수 있어 새로운 시스템의 구성에 부품처럼 사용할 수 있다.? 다형성(Polymorphism)"one interface, multiple implementation"☞ 하나의 인터페이스를 사용하여 다양한 구현방법을 제공한다.이렇게 하나의 인터페이스를 선언한 후 여러 개의 구현이 가능하다는 것이 다형성의 개념.☞ 모형에서 선언된 draw() 메소드는 할당되는 하위 클래스의 객체에 따라 다양한 변신을 시도하여 서로 다른 결과를 나타낸다.☞ 메시지에서 요구한 메소드(draw())의 매핑을 동적으로(실행시간) 수행☞ 객체지향에서는 이 다형성을 구현하기위해 추상클래스, 추상 메소드를 제공하고 오버로 딩, 오버라이딩 개념을 제공한다.오버로딩은 기존에 메소드의 인자를 이용하여서 하나의 함수에 여러 가지 기능을 만드는 것이다.예를 들어 기존에 int a(int a);라는 함수와또 다른 int a(int a, char b)가 존재한다고 가정한다.main()에서 호출시 a(7); 이라고 호출하게 되면 첫번째 int a(int a)라는 함수가 호출된다. 만약 a(7,'x'); 을 호출했다면 후자인 int a(int a, char b)가 호출되게 되는 것이다.
TCP/IP와 OSI 7 Layer 비교TCP/IP기 능OSI 7 Layer5 계층Application Layer최상위 계층으로 파일전송이나 전자우편 등의 사용자서비스 및 응용프로그램 통신기능 제공7 계층Application Layer표준화된 응용 접속과 공통으로 이해할 수 있는 정보를제공하기 위하여 데이터에 유용한 변화를 가함(암호화, 압축, 형식변환 등)6 계층Presentation Layer응용 프로그램 사이에 통신 제어 구조를 제공한다. 이것은 상호 작용하는 응용 프로그램이 통신 성립, 처리 및 데이터 관리, 종료를 어떠한 식으로 할지를 정의해 준다는 뜻이다.(대화제어, 동기화)상위층에 필요한 전송제어 기능을 제공한다. 통신하고자 하는 컴퓨터들 간의 연결 및 데이터 전송제어 기능 담당5 계층Session Layer4 계층Transport Layer통신의 양단간에 신뢰성 있고 투명한 데이터 전송을 제공한다. (에러 검출과 정정기능, 흐름제어,분류와 합류, 다중화와 역 다중화)4 계층Transport Layer3 계층Internet Layer데이터의 전송 경로를 결정하고 시스템을 연결하는데 필요한 데이터 전송과 교환기능을 제공3 계층Network Layer2 계층Physical Layer직접 연결된 물리적 링크에 신뢰성 있는 데이터 전송을 위한 동기화, 오류검출/ 복구, 흐름제어 기능을 제공한다. 즉, 통신로의 채널선택, 설정 및 해제를 담당2 계층Data Link Layer1 계층Physical Layer통신장비간 물리적인 인터페이스 규격과 비트 전송을 위한 타이밍, 전압 레벨 등의 물리적 전송매체에 종속적인규칙에 관한 계층이다. 즉, 통신의 속도, 전압, 소켓의 필수 정의1 계층Physical LayerOSI모델이 국제표준기구(ISO)에 의해 설계되고 사람들에게 널리 알려진 모델이기는 하지만,현재 가장 많이 쓰는 프로토콜은 TCP/IP 프로토콜이며, 현재 세계 거의 모든 망이 TCP/IP 네트워크를이용해 연결되어있다.첫 번째로 두 모델간의 유사점은OSI모델과 TCP/IP모델 모두 계층구조로 이루어져 있다는 점이다.계층구조는 네트워크를 작고 쉬운 기능의 조합으로 만들어서 쉽게 개발가능하게 하고,다양한 하드웨어와 소프트웨어를 기대할 수 있게 하며, 한계층의 변화가 다른 계층에 영향을 미치지 않는다.그리고 모델모두 응용층을 가지고 있다는 점이다. 물론 각각의 응용층들은 다른 서비스를 제공한다.또한 두 모델 모두 전송계층과 네트워크계층을 가지고 있다는 점과 회선 교환망이 아닌 패킷 교환망 방식을가지고 있다는 점이 유사점이다.두 번째로 두 모델간의 차이점은OSI 7 Layer의 표현층과 세션계층을 TCP/IP는 응용계층이 같이 처리한다는 점과TCP/IP는 데이터링크 계층과 물리 계층을 하나로 취급한다는 점과TCP/IP가 거의 모든 곳에서 표준으로 사용된다는 점이다.TCP/IP는 적은 계층을 가지므로 상대적으로 SimpleTCP/IP는 Internet이 개발한 표준 ProtocolTCP/IP Model은 Protocol 때문에 신뢰도 인정(Network 구축 시 OSI Model을 참고하지만 OSI-Related Protocol을 사용하지 않음)각 계층구조의 장단점은.TCP/IP의 장점은 인터넷이 사용된 이후로 계속 표준으로 사용되어 왔다는 점과 수십 년간의 운용경험으로인한 신뢰도가 OSI 7layer보다 크다.반면 OSI 7 layer는 가이드 역할로는 충실하지만 실제 구현된 예가 거의 없어서 신뢰도가 약하지만,OSI 7 layer의 장점이라면 역시 전 세계적으로 널리 알려져 있고, 교육하기에 적합한 모델이라 네트워크를입문하는 과정에서 이해에 아주 좋은 모델이 될 수 있다는 점이다.OSI 7 Layer의 단점으로는 우선 TCP/IP 사용 중에 OSI가 만들어져 개발의 시기가 적절치 않았다.기술적인 측면에서 presentation layer와 session layer가 많이 쓰이지 않으며, data link layer는 너무 많은것을 다루게 되었다. 즉 layer들이 균형에 맞게 정의되지 않았다는 뜻이다.또한 너무 복잡하며, 여러 layer들에서 중복된 기능들이 있다.사회적으로는 ISO의 관료적 이미지가 네트워크 개발자 및 사용자들에게 잘 받아들여지지 않았다는 점이다.TCP/IP의 단점으로는 protocol들 간의 interface(경계)나 기능들이 확실히 구분되어 있지 않다.그리고 일반적이지 않다. 즉, OSI 모델에 비하여, TCP/IP를 통해 다른 네트워크 기술의 구조를 설명하기가쉽지 않다는 점이 있다.가장 밑에 있는 host-to-layer는 잘 정의된 layer가 아니다. layer라기보다는 인터페이스로 볼 수 있다.physical layer와 data link layer는 언급조차 되어있지 않다.TCP 와IP를 제외하고는 제대로 쓰여 지지 않았다. 예) telnet programTCP/IP는 국제공인표준인 OSI 7 Layer을 따르지 않고 독자적으로 정의한 4단계의 계층에 맞추어 설계 되었지만 완전히 다른 모델은 아니다. 기능을 서로 비교해보았을 때 OSI 7계층과 맞추어 비교할 수 있다.TCP/IP 中 4계층 ? OSI 7계층 中 7~5계층TCP/IP 中 3계층 ? OSI 7계층 中 4계층TCP/IP 中 2계층 ? OSI 7계층 中 3계층TCP/IP 中 1계층 ? OSI 7계층 中 2~1계층즉, TCP/IP 프로토콜을 사용하는 응용 프로그램(예: 인터넷 익스플로러)은 기능적으로 OSI 델 7계층 中 7~5계층의 역할을 한다. 요즘 개발되는 인터넷 관련 프로그램들이 전부 TCP/IP 계층을 따르고 있다고 보면 된다.TCP/IP의 TCP 프로토콜은 3계층인 전송 계층으로 OSI 7계층의 4계층과 같은 역할을 하고, IP 프로토콜은 2계층인 인터넷 계층으로 OSI모델의 3계층과 같은 역할을 한다.마지막으로, TCP/IP 프로토콜을 사용한 통신(예: 인터넷)을 하고자 할 때 컴퓨터에 랜카드를 꽂고 "TCP/IP 프로토콜 지원"과 같은 소프트웨어를 설치하게 되는데, TCP/IP 1계층인 네트워크 접근 계층을 지원하기 위해서이다. 여기서 OSI모델로 치면 1~2계층의 역할을 한다.결론적으로 OSI 7 Layer와 TCP/IP의 차이점은 OSI는 국제공인표준이고 TCP/IP는 국제공인표준으로 지정된것은 아니라는 것이다. 규격을 결정한 단체가 서로 다르며, 서로 정해놓은 규격의 내용면에서도 하나는 7계층
◎ Java 언어가 C 언어에서 개선했는데, 어떤 특징이 추가되거나 삭제되어 어떤 설계원칙을 만족시키며, 또는 어떤 설계원칙을 위배하는지 논하라.자바는 C++와 유사한 객체지향 프로그램인 언어이면서도 꼭 필요한 기능을 위해 C와 C++의 불필요한 요소들은 모두 삭제한 것이 특징이다. 예를 들면 C초보자가 배우기 가장 까다로운 포인터 연산을 사용하지 않으며, 스트럭트 타입과 같은 중복적인 기능을 삭제했다.또한 C++에서 개념이 복잡하여 혼동을 유발하곤 하는 연산자 오버로딩, 다중 상속, 자동 코션 등의 기능도 삭제했다.그러나 자바는 이러한 단순함을 가지면서도 C/C++에서 제공되지 않는 Garbage Collection, 쓰레드 동기화, 풍부한 클래스 라이브러리 등 추가적인 기능을 제공한다.즉, 자동적인 Garbage Collection 기능은 메모리 관리를 위해 사용자가 일일이 free 선언을 해야 하는 불편함을 해소했으며, Xerox CeDAr/Mesa에서 따온 쓰레드 동기화는 멀티쓰레드 프로그램을 더욱 간단히 구성하도록 도와준다. 또한 구문 자체가 단순해진 반면, 사용자 인터페이스, 그래픽, 네트워크 등을 지원하는 풍부한 클래스 라이브러리를 지원함으로써 사용자가 직접 프로그램 해야 하는 번거로움을 많이 줄여준다.자바는 멀티쓰레드를 지원한다.멀티쓰레드란 한 프로그램 내에 여러 개의 쓰레드가 존재하여 동시에 여러 가지 일을 수행하는 것으로, 자바는 언어 자체에서 멀티쓰레드를 지원한다. 즉, 하나의 단일 자바 프로그램은 여러 개의 쓰레드 프로그램으로 구성될 수 있으며, 이 쓰레드는 독립적으로 다른 일을 계속해서 할 수 있다.자바는 실시간 시까지 링크 과정을 연기함으로써 응용 프로그램이 다이나믹하게 패치 될 수 있도록 한다. 이 방식은 상위 클래스가 수정됐을 때 이의 하위 클래스까지도 다시 컴파일 하는 'Superclass Problem'을 해결한다.설계원칙c언어는 매우 큰 일반성을 제공하려고 포인터를 허용하여 신뢰성과 판독성에 큰 문제를 야기하는데 자바는 성능을 떨어트리는 이식성, 보안성, 신뢰성 등을 보완하기 위하여 언어에 다중 스레드(프로세스 인스턴스)를 지원하도록 설계되었다.자바는 포인터 연산을 없애고, 자료형 검사를 엄하게 하고, 자동으로 메모리를 수집(garbage collection)하고, 예외취급으로 시스템 오류를 막도록 견고하게 설계함으로써 c언어의 일반성 문제를 해결하였다.확장성(Extensibility)은 언어의 특징을 더 추가할 수 있도록 하자는 것으로1.새로운 자료형을 정의할 수 있도록 하는 것.2.라이브러리에 새로운 함수를 첨가할 수 있도록 하는 것.3.번역기에 새 예약어나 새로운 구문을 추가하는 것.4.대부분의 언어가 새로운 자료형과 이 자료형에 대한 연산을5.선언하는 방법으로 일부 확장을 허용하는 특징이 있는데JAVA의 overloading, overriding 등이 확장성을 잘 나타내고 있다.c언어의 매개변수 전달방법에 직교성이 없다.c언어에서는 배열형을 제외한 모든 자료형이 함수값 으로 반환 될 수 있다.c언어의 매개변수 전달 방법에 직교성이 없다. 즉, c언어는 배열만이 참조 전달방식(call by reference)을 취하며, 나머지 모든 매개변수들은 값 전달방식(call by value)을 취한다.그러나 자바에서는 매개 변수 전달 방식이 한 가지로 통일되어 있다.바로 "값(call by value)"에 의한 전달이 그 방식이다.자바에서는 모든 매개변수들이"값(call by value)"에 의해 전달된다.기본형일 때는 순수한 값이 전달되지만, 객체형일 때는 "객체의 포인터 값"이 전달되는 방식이다.◎ 여러분이 선택한 프로그래밍 언어에서 추가되어야 할 기능을 하나 골라 라. 그 기능이 추가되어야 하는 이유는? 그 기능이 행동과 다른 기능과의 상호작용을 완전히 명시하기 위해서는 무엇을 설명해야 하는가?최근 들어 모바일 단말기는 다양한 서비스와 첨단기술의 도입으로 더욱 다양한 플랫폼으로 변화 발전이 예상된다. 또한 이에 발맞춰 Bluetooth, 음성인식, 문자인식 등, 휴대 기기의 특성에 걸맞는 다양한 어플리케이션이 도입될 전망이다.자바는 이러한 문제를 하나의 유용한 어플리케이션을 통하여 수많은 제조사들의 휴대폰과 다양한 하드웨어 구조를 가지는 모바일 기기에서 하나의 플랫폼으로 원활하게 동작하게 될 것이다.