총 게시물 25건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[1.기본 지식편]

1장 객체지향 프로그래밍

글쓴이 : 카이로 날짜 : 2014-01-05 (일) 23:26 조회 : 13748
글주소 : http://www.androidside.com/430/15
 
  서울게임아카데미
게임학원추천, 2017년 한국 소비자만족지수 1위, 고용노동부국비지원, 수강료조회
www.seoulgame.co.kr
  SJCU 컴퓨터소프트웨어학과
소프트웨어 개발자 양성을 위한 교과과정 개설
home.sjcu.ac.kr/
  SBS아카데미게임학원 인천점
취업의문을 두드려라!,프로그래밍, 1:1멘토링, 수강료할인
incheon.sbsgameacademy.com
신청하기


1장  객체지향 프로그래밍
1.1 소개
객체지향 프로그래밍(Object-Oriented Programming)은 절차지향 프로그래밍(Procedure-Oriented Programming)과 비교되는 프로그래밍 방법으로 모든 데이터를 객체 단위로 취급하여 프로그래밍하는 것을 말하며 현재 가장 선호되고 있는 프로그래밍 방법 중에 하나이다.

기존의 절차지향 프로그래밍 방법으로 작성해야 했던 C 와 같은 언어들은 행위에 중점을 두어 프로그래밍을 해야 했기 때문에 코드의 양이 많아 질수록 이해하기 힘들고 유지보수 하기 힘든 단점이 있었다. 이러한 단점을 보완한 것이 객체지향 프로그래밍이다. 1960년 중반에 SIMURA 라는 시뮬레이션 언어에서 유래한 객체지향 개념이 1970년대 Smalltalk 를 통해 구체화되어 많은 이들에게 관심을 끌기 시작하였다. 그 뒤 1995년 객체지향 개념을 적용한 자바가 세상에 모습을 드러내면서 많은 이들이 자바를 실제 프로젝트에 사용하기 시작하였다.

객체지향 프로그래밍 개념에서 말하는 객체(Object)는 우리가 주변에서 접할 수 있는 자동차, 건물, 비행기 등으로 볼 수 있으며 이러한 객체를 추상화하여 표현한 것을 클래스라고 한다. 그렇기 때문에 객체를 사용하기 위해서는 먼저 클래스를 구체화 시켜야 한다. 이렇게 구체화된 객체를 인스턴스(Instance)라고 한다.

객체지향 프로그래밍 언어는 모든 부분을 객체 단위로 구성하고 이를 조합하여 사용하는 방식이기 때문에 객체만 잘 구성하면 전체 프로그램을 쉽게 개발하고 유지보수할 수 있다.

이러한 객체지향 프로그래밍은 절차지향 프로그래밍과 구분되는 여러 특징을 가지는데 그 중에서 가장 중요한 상속, 다형성, 캡슐화를 객체지향 프로그래밍의 3대 특징이라 한다.

객체지향 프로그래밍의 특징을 살펴보면 다음과 같다.
 

1.2 객체(object)
객체지향 프로그래밍은 시간적으로 발생하는 행위에 중점을 두는 것이 아니라 객체에 중점을 두어 프로그래밍을 하는 방식이기 때문에 전체 프로그램은 객체들의 조합으로 구성된다.
그렇기 때문에 이러한 객체를 얼마나 잘 추상화하여 클래스로 표현할 수 있느냐가 전체 프로그램의 완성도를 결정한다.

그림 1-2-0 실생활에서의 객체
1.2.0.png


실세계에 있는 자동차, 사람같은 객체의 상태와 행위를 객체지향 프로그래밍 언어에서 사용하기 위해서는 변수와 메소드로 추상화해야 한다. 여기서변수는 객체의 상태를 저장하기 위해, 메소드는 객체의 행위를 표현하기 위해 사용된다.

1.2.1 캡슐화(Encapsulation)
객체는 상태와 행위를 가진다. 이를 추상화하여 클래스로 만들면 상태는 변수로, 행위는 메소드로 표현할 수 있다. 기본적으로 객체는 행위의 결과 없이 상태가 변경될 수 없는 것을 전제로 하기 때문에 클래스의 변수는 반드시 메소드를 통해서만 변경될 수 있도록 해야 한다. 이렇게 메소드를 통해서만 변수를 제어할 수 있게 작성된 클래스를 캡슐화되었다고 한다.
 
그림 1-2-1 캡슐화(Encapsulation)
1-2-1.PNG

 
 캡슐화는 모듈성(Modularity)과 정보은닉(Information hiding)의 장점을 제공한다. 모듈성은 생성된 객체가 다른 객체에 영향을 받지 않고 독립적으로 동작할 수 있는 것을 말하며 정보은닉은 메소드를 통해서만 변수에 접근할 수 있도록 클래스를 작성하여 불필요한 정보를 외부에 노출하지 않도록 하는 것을 말한다.
 
 
1.2.2 상속(Inheritance)
자식 클래스에서 부모 클래스의 형질을 물려 받아 사용하거나 재정의하여 사용하는 것을 상속이라고 하며 이는 객체지향 프로그래밍 언어의 대표적인 특징 중 하나이다. 이러한 상속을 통해서 클래스를 작성하면 같은 코드를 여러 번 작성하지 않아도 되기 때문에 소스 코드의 재사용성을 높일 수 있다.
 
그림 1-2-2 상속(Inheritance)
1-2-2_코드.JPG

 
[TIP&TECH]
상속 관계를 표시할 때는 자식 클래스(SportsCar)에서 부모 클래스(Car)로 화살표를 그린다. 즉 화살표의 머리를 부모 클래스로 향하게 그린다 
   
  
1.2.3  메시지(Message)
객체지향 프로그래밍에서 메시지는 객체간의 통신을 위해 사용한다. 객체들은 캡슐화되어 있기 때문에 특정 객체에게 어떤 기능을 수행하게 하기 위해서는 객체의 메소드를 호출해야 한다. 이렇게 어떤 기능을 하도록 객체에 명령을 내리는 행위(메소드를 호출하는 행위)를 객체지향 개념에서는 메시지라고 한다.
 
그림 1-2-4 메시지(Message)
1-2-4_코드.JPG

 
 
1.2.4  다형성(Polymorphism)
다형성이라는 것은 메시지를 받는 객체에 따라 다른 반응을 보일 수 있는 것을 말한다.
예를 들어 인터페이스 Vehicle 이 있고 이를 구현한 클래스 Airplane 과 Car 가 있다고 했을 때 Vehicle 인터페이스의 move() 메소드는 Airplane 과 Car 클래스 모두 구현해야 한다. 그렇지만 Airplane 과 Car 의 move() 메소드는 해당 클래스의 성질에 맞게 구현되어야 하기 때문에 서로 다른 동작을 한다. 즉 같은 메소드의 호출에도 불구하고 호출되는 객체에 따라 실제 동작이 달라질 수 있는 것을 다형성이라고 한다. 좀 더 쉬운 예를 실생활에서 찾아본다면 리모콘을 들 수 있다. 국내 인터넷 회사에서 제공하는 IPTV를 신청하면 셋탑박스와 리모콘을 제공해준다. 이 리모콘에는 TV와 셋탑박스를 키고 끌 수 있는 버튼과 TV와 셋탑박스를 한 번에 키고 끌 수 있는 버튼도 제공해주고 있다. 이 버튼을 누르면 TV도 켜지고 셋탑박스도 겨지는 것이다. 즉 버튼은 한 개이지만 이 버튼은 TV에서는 TV를 키게 하고 셋탑박스에서는 셋탑박스를 키게 하는 것이다. 이것이 바로 객체에 따라 동작이 달라지는 다형성의 예로 볼 수 있다.
 
그림 1-2-5 실생활에서의 다형성
1-2-5.PNG


 이러한 다형성은 객체지향 개념에서 매우 중요한 개념으로 이를 제대로 이해하기 위해서는 상속, 오버로딩, 오버라이딩이라는 개념을 이해할 필요가 있다. 그렇기 때문에 지금은 다형성에 대해 이해가 잘 되지 않더라도 그냥 넘어가도록 하자. 왜냐하면 자바로 직접 프로그램을 작성해보고 인터페이스 및 관련 개념들에 대해서 익히면 다형성이라는 개념도 자연스럽게 이해할 수 있기 때문이다.
 

1.3 클래스, 객체
클래스는 객체지향 프로그래밍의 핵심인 객체를 표현한 설계도이다. 클래스를 프로토타입(prototype) 또는 템플릿(template) 이라고 하는데 그 이유는 클래스가 프로그램에서 실질적인 기능을 하지 못하기 때문이다. 클래스는 단순히 변수와 메소드를 정의할 뿐이며 실제로 프로그램에서 사용되기 위해서는 클래스를 구체화시켜 객체를 생성해야 한다. 클래스를 통해 구체화된 객체는 메모리 할당과 초기화 과정을 거쳐 다른 객체와 메시지를 통해 서로 통신할 수 있다. 클래스와 객체을 좀 더 쉽게 이해하고 싶다면 클래스를 집 설계도로 보고 객체를 설계도에 대로 지어진 실제 집이라고 보면 된다. 
  
그림 1-3-0 클래스(설계도)와 객체(실제 집)
1-3-0.PNG


 
1.4 실행 단계
자바 프로그램을 실행하기 위해서는 자바 소스 파일을 작성하고 컴파일하여 클래스 파일을 생성해야 한다. 여기서 클래스 파일은 자바 인터프리터에 의해 자바가상머신에서 실행될 수 있는 바이트 코드이다. C 와 같은 프로그래밍 언어는 소스 파일을 컴파일하면 실행 파일이 생성되어 운영체제에서 바로 실행할 수 있지만 자바는 컴파일하여 생성된 클래스 파일을 운영체제에서 바로 실행할 수 없고 반드시 자바가상머신 상에서 실행해야 한다. 이러한 실행 방식으로 인해 초기에는 자바가 다른 프로그래밍 언어보다 느리다는 평가를 받아왔지만 하드웨어의 발달과 자바가상머신의 개선으로 인해 속도상의 문제는 많이 해결되어 지금은 C++ 보다 더 나은 속도를 보인다는 평가를 받기도 한다. 
 
자바 실행 단계를 그림으로 표현하면 다음과 같다.
 
그림 1-4-0 자바 실행 단계
1-4-0.PNG

 
[TIP&TECH]
자바 프로그램을 작성하고 실행하기 위해서는 먼저 JDK 를 설치해야 한다. 이에 대한 자세한 방법은 [기타 지식편]을 참고하기 바란다.
 
자바 프로그램을 실행하기 위해서는 가장 먼저 확장자가 java인 소스 코드를 작성해야 한다. 그리고 javac 명령어를 이용해서 컴파일하여 확장자가 class 인 파일을 생성하고 마지막으로 이 클래스를 java 명령어를 사용하여 실행해야 한다. 이러한 일련의 순서를 각 단계별로 살펴보도록 하자.
 
1) 소스 코드
윈도우에서 메모장을 열어 소스 코드를 다음처럼 작성하고 Test.java 라는 이름의 파일로 c:\ 에 저장한다.
public class Test {
    public static void main(String[] args) {
        System.out.println("Hello World!!");
    }
}
 
2) 컴파일
윈도우에서 커맨드(Command) 창을 실행시키고 Test.java 가 위치한 c:\ 로 이동한다. 그리고 파일 확장자를 포함하여 다음과 같이 입력한다. 그러면 c:\ 에 Test.class 파일이 생성된 것을 확인할 수 있다.
c:\>javac Test.java
 
 
[TIP&TECH]
커맨드 창을 실행하는 방법은 윈도우 버전에 따라 조금은 다르지만 커맨드 창을 실행하는 윈도우 명령어는 동일한다.
 
윈도우 7에서는 키보드에서 윈도우 키를 누르고 cmd를 입력한 후 엔터 키를 눌러 열 수 있다.
1-4-1.png

윈도우 XP에서는 윈도우 실행창에서 cmd를 입력하고 확인 버튼을 클릭해서 열 수 있다.
1-4-2.png


 
3) 실행
컴파일과 마찬가지로 c:\ 에서 다음과 같이 명령어를 입력한다. 이때 클래스 파일의 확장자를 입력하지 않도록 한다. Test 클래스 파일을 실행하면 화면에 "Hello World!!" 가 출력되는 것을 확인할 수 있다.
c:\>java Test
 
방금 여러분은 자바 프로그램을 작성해서 실행하였다. 그러나 아직 작성한 자바 프로그램에 선언되어 있는 public, static 등이 무엇인지 잘 모를 것이다. 하지만 이에 대해서는 차후에 살펴보도록 할 것이니 지금은 단지 자바 프로그램을 작성하기 위해서는 가장 먼저 소스 코드를 작성해야 하고 그 다음에 소스 코드를 컴파일하고 실행해야 한다는 것만 기억하기를 바란다.
 
윈도우 XP에서는 윈도우 실행창에서 cmd를 입력하고 확인 버튼을 클릭해서 열 수 있다.


 
 
이 글은 무단전제나 무단배포가 금지된 글입니다. 공유하고자 한다면 제목과 링크만 공유하기 바랍니다.


로그인 창이 있는 "정보 수정"에서
서명 이쁘게 등록해보세요 ^^

jinnit 2014-12-17 (수) 14:18
감사..^^..
댓글주소
일우정 2014-12-28 (일) 15:47
감사합니다요
댓글주소
여왕님 2015-02-12 (목) 18:13

즐거운 마음으로 정주행 시작합니다^^

댓글주소
필연 2015-03-03 (화) 11:52
좋은 내용 감사합니다.
댓글주소
shadow2496 2015-03-10 (화) 20:58
감사합니다!!
댓글주소
masami 2015-05-09 (토) 10:12
고맙고도 요긴한 자료 고맙습니다.
댓글주소
공부좀 2015-06-25 (목) 12:37

열심히 하겠습니다

댓글주소
대학생예비창… 2015-07-01 (수) 10:14
어렵네요.....
댓글주소
열공해야죠 2015-07-19 (일) 10:03

감사합니다

댓글주소
dodohagi 2015-07-29 (수) 20:00

감사합니다

댓글주소
라쿠드 2016-08-02 (화) 19:27
감사합니다
댓글주소
솔플러 2016-09-29 (목) 20:21
도움이많이됩니다,
댓글주소
알지롤 2016-10-01 (토) 13:51
감사합니다.
댓글주소
처음  1  2
이전글  다음글  목록 글쓰기

총 게시물 25건, 최근 0 건 안내 RSS
번호 분류 제목 추천 조회
25 0.소개  0.1 머리말 37 29 9860
24 0.소개  0.2 목차 16 10 6655
23 1.기본 지식편  0장 기본 지식편 27 30 10149
22 1.기본 지식편  1장 객체지향 프로그래밍 33 25 13749
21 2.코드 지식편  1장 0. 변수, 데이터형 20 15 7253
20 2.코드 지식편  1장 1. 가장 빠른 변수는 지역 변수이다. 19 14 7496
19 2.코드 지식편  1장 2. 멤버 변수를 중복 초기화하지 않는다. 17 11 7434
18 2.코드 지식편  1장 3. 멤버 변수의 디폴트 값에 대해 알아야 한다. 17 7 7631
17 2.코드 지식편  1장 4. 블록 내에서 사용할 변수는 지역 변수로 선언해야 한다. 16 12 6594
16 2.코드 지식편  1장 5. 자동 변수를 사용할 때는 항상 초기값을 설정해야 한다. 19 10 7224
15 2.코드 지식편  1장 6. 상수는 되도록 기본 데이터형을 사용해야 한다. 16 11 6885
14 2.코드 지식편  1장 7. 상수는 사용시 주의해야 한다. 20 11 6556
13 2.코드 지식편  1장 8. 변수는 되도록 사용 시점에 선언해야 한다. 15 7 5443
12 2.코드 지식편  1장 9. 객체보다는 기본 데이터형을 사용해야 한다. 13 7 5702
11 1.기본 지식편  1장 객체지향 프로그래밍 체크 포인트 17 9 6045
10 1.기본 지식편  2장 소스 코드 구성 28 15 9955
9 1.기본 지식편  2장 소스 코드 구성 체크 포인트 8 8 5471
8 1.기본 지식편  3장 클래스 구성 22 10 9647
7 1.기본 지식편  3장 클래스 구성 체크 포인트 6 4 5195
6 1.기본 지식편  4장 제한자 11 6 7083
5 1.기본 지식편  4장 제한자 체크 포인트 4 3 4887
4 1.기본 지식편  5장 연산자 11 7 9566
3 1.기본 지식편  5장 연산자 체크 포인트 4 5 5609
2 0.소개  스피드 자바의 오프라인 서적의 평. 11 8 6374
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기