1 / 49

제 4 장 OOP 개념

제 4 장 OOP 개념. 장성봉. 구조적 프로그램과 객체 지향 프로그램. 구조적 프로그램 ( Structured programming ) 함수를 잘 만드는데 초점이 맞추어짐 공통 부분이 필요로 하면 기존의 함수를 재 사용 ( 소스 재 사용 ) 함수를 재 사용하는데 여러 가지 문제점이 발생 객체 지향적 프로그램 객체를 만드는데 초점이 맞추어짐 공통 부분이 필요하면 객체를 재 사용 ( 객체 재 사용 ) 비슷한 객체만 있더라도 충분히 재 사용 가능. 객체란.

Download Presentation

제 4 장 OOP 개념

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제 4 장 OOP 개념 장성봉

  2. 구조적 프로그램과 객체 지향 프로그램 • 구조적 프로그램( Structured programming ) • 함수를 잘 만드는데 초점이 맞추어짐 • 공통 부분이 필요로 하면 기존의 함수를 재 사용 ( 소스 재 사용 ) • 함수를 재 사용하는데 여러 가지 문제점이 발생 • 객체 지향적 프로그램 • 객체를 만드는데 초점이 맞추어짐 • 공통 부분이 필요하면 객체를 재 사용 ( 객체 재 사용 ) • 비슷한 객체만 있더라도 충분히 재 사용 가능

  3. 객체란 • 무형, 유형의 인간이 인지하는 모든 것 • 사람 , 자동차 , 전화 , 꿈 • 객체는 속성과 행동으로 표현 할 수 있다. • 속성 : 색 , 길이 , 속도와 같이 객체의 성질을 나타내며 프로그램에서는 변수로 표현 된다. – attribute , member field • 행동(behavior) : 객체의 쓰임을 나타내며 프로그램에서는 함수( 메소드 )로 표현 된다. - method • 속성 자체는 객체가 아니다. ( 색 , 길이 ) • 객체의 정의는 정의 하는 사람마다 다를 수 있다.

  4. 객체(1/2) • 정의 #1 • 실세계 영역에 있는 정보, 물건, 사물, 개체, 개념등을 표현함. • 그래픽 프로그램 • point, line, polygon, rectangle, square, ellipse, circle, window, etc. • 대학 인사관리 시스템 • person, student, faculty, staff, part-timer, etc. • 워드 프로세스 • character, word, sentense, paragraph, documents, fonts, etc.

  5. 객체(2/2) • 정의 #2 • 데이터와 이 데이터를 처리하는 함수가 한곳에 뭉쳐있는 것 • 속성과 기능을 함께 가지고 있음 • 객체의 조건 • 상태(State)를 가져야 한다. • 행위(Behavior)를 가져야 한다. • 고유의 식별자(Identity)를 가져야 한다.

  6. OOP의 개념 • OOP란 Object Oriented Programming 으로 객체 기반의(중심의) 프로그램 이란 뜻 • OOP에서 알아두어야 할 개념들.

  7. 추상화( abstraction ) • 객체 지향 프로그램의 기본 단계로 프로그램 하고자 하는 객체의 속성과 필요한 기능을 정리한다. • 객체 모델링에 해당 한다. • 구체화되지 않은 명세를 의미 • 자동차를 추상화 • 속성 : 속도 , 색 , 자동차 명 • 기능 : 속도 증가 , 속도 감소

  8. 캡슐화( encapsulation ) • 추상화 시킨 자료를 클래스라는 개념으로 포함 시키는 것을 의미 • 클래스란 객체의 속성과 기능을 정의하는 문장이다. • 높은 모듈성(modularity)과 정보의 은닉성(information hiding)을 제공 한다. • 은닉성이란 객체의 외부 접근에 대한 통제를 의미

  9. 캡슐화에 의하여 생성된 클래스 public class Ex001Car { int intSpeed; int intColor; String strCarName; public void speedUp() { intSpeed ++; } public void speedDown() { intSpeed --; } }

  10. Object and Classes • Class • 클래스란 객체를 추상화 하여 자바 프로그램에서 사용 할 수 있는 코드 형태로 표현한 것 • 객체의 명세서(타입) • 설계서와 동일 • 객체( object ) • 클래스의 인스턴스 • 클래스를 이용하여 new키워드를 사용하여 만든 실체 • 설계서를 바탕으로 만든 객체 • 프로그램 • 객체들의 집합

  11. 추상화 class Car { ..... } 실세계의 객체 class로 표현 ( 자동차 설계도 ) new class Car { ..... } Car c = new Car() 인스턴스 (설계도에 의해 생산된 자동차 ) Object and Classes

  12. Car Class 와 Instance public class Ex002InstanceCar { public static void main( String args[] ) { Ex001Car objCar; objCar = new Ex001Car(); objCar.strColor = "노란색"; objCar.strCarName = "나의 자동차"; objCar.speedUp(); System.out.println("자동차 색 = " + objCar.strColor ); System.out.println("자동차 이름 = " + objCar.strCarName ); System.out.println("자동차 현재 속도 = " + objCar.intSpeed ); } } 이놈이 객체

  13. 자바에서 객체 지향 3단계 객체 모델링 ( 추상화 ) 클래스 정의 ( 캡슐화 ) 객체 생성과 사용 ( 인스턴스화 )

  14. 자바에서 객체 사용하기 레퍼런스 변수 정의 Ex001Car objCar; 객체 생성 objCar = new Ex001Car(); objCar.strColor = "노란색"; objCar.strCarName = "나의 자동차"; objCar.speedUp(); 객체 사용

  15. main() 메서드의 이해 public static void main(String[] args) 자바 프로그램을 시작 할 때 자바 가상머신에 의하여 최초로 호출 되는 메서드 이다. 여러 개의 클래스로 이루어진 프로그램일 경우에도 시작 하는 클래스는 반드시 main() 메서드를 포함해야 한다. 일반적으로 메서드는 독립적으로 호출 될 수 없으며 객체의 일부로만 호출이 가능 하다. 그러나 static으로 선언된 메서드는 독립적으로 호출 가능 하다.

  16. main() 메서드의 인자 • 아래와 같이 실행 하면 실행 인자들 중에 자바 해석기와 시작 클래스를 제외한 나머지를 인자로 넘겨 준다. java Ex003Args 안녕 하세요 args[0] args[1]

  17. main() 메서드의 인자 public class Ex003Args { public static void main( String args[] ) { for( int i = 0 ; i < args.length ; i++ ) { System.out.println("args[" + i + "] = " + args[i] ); } } }

  18. 생성자( Constructor ) 객체를 생성 할 때 클래스이름에 ()를 붙여 생성 하였다. 이때 사용한 “클래스이름()”가 생성자 이다. 클래스 안에서 클래스 이름과 동일한 이름을 갖는 함수이다. 리턴 값을 기술 하지 않는다. 주로 public 키워드를 정의하여 준다. 생성자를 정의하지 않을 수도 있다. ( 자바 가상 머신이 기본 생성자를 제공해 준다. 이때 기본 생성자는 특별한 동작을 하지 않는다. ) 생성자는 다음과 같다. public 클래스이름(인자들) { ... }

  19. 생성자( Constructor ) 생성자는 인자를 가질 수 있다. 인자 있는 생성자를 정의 시에는 인자 없는 생성자는 기본으로 제공되지 않는다.

  20. 생성자( Constructor ) public class Ex004Constructor { int intSpeed; String strColor; String strCarName; public Ex004Constructor() { intSpeed = 1; } public Ex004Constructor(int intStart) { intSpeed = intStart; }

  21. 생성자( Constructor ) .............................. .............................. public static void main( String args[] ) { Ex004Constructor objCar1; objCar1 = new Ex004Constructor(); Ex004Constructor objCar2 = new Ex004Constructor(10); System.out.println("objCar1 속도 = " + objCar1.intSpeed ); System.out.println("objCar2 속도 = " + objCar2.intSpeed ); } }

  22. 변수 this 모든 호출되어 있는 메서드는 현재 객체를 참조하는 this라는 변수를 갖는다. 자기 자신을 가리키는 레퍼런스 변수 이다. 메서드가 클래스의 인스턴스 변수를 참조 할 때 컴파일러에 의해 묵시적으로 사용된다. 자기 자신의 멤버 필드나 메서드를 정확하게 지시 하기 위하여 사용된다. 자신의 객체의 래퍼런스를 함수의 아규먼트로 전달해야 할 필요가 있을 때 사용한다.

  23. 변수 this public class Ex005This { int intSpeed; String strColor; String strCarName; public Ex005This() { intSpeed = 1; } public Ex005This(int intSpeed) { this.intSpeed = intSpeed; }

  24. 변수 this .................................. .................................. public static void main( String args[] ) { Ex005This objCar2 = new Ex005This(10); System.out.println("objCar2 속도 = " + objCar2.intSpeed ); } }

  25. this() 생성자에서 사용되는 특수한 함수이다. 생성자를 호출 하는 함수이다. 아규먼트를 넘길 수 있다. 생성자의 맨 처음 부분에 나와야 한다.

  26. this() public class Ex006ThisMethod { int intSpeed; String strColor; String strCarName; public Ex006ThisMethod() { this(5); } public Ex006ThisMethod(int intSpeed) { this.intSpeed = intSpeed; }

  27. this() ............................... ............................... public static void main( String args[] ) { Ex006ThisMethod objCar2 = new Ex006ThisMethod(); System.out.println("objCar2 속도 = " + objCar2.intSpeed ); } }

  28. finalize() 클래스의 메모리가 가비지 콜렉팅( Garbage Collecting )되기 직전에 자동으로 호출된다. Object 클래스에 protected void finalize(){}로 정의 되어 있다. 필요시 오버라이딩(overriding)해서 사용 할 수 있다. 객체 제거를 최적화하는데 사용 될 수 있다. 거의 사용되지 않는다.

  29. 가비지 콜렉팅( Garbage Collecting ) • 객체가 사용하던 메모리를 시스템에 반환하여 준다.( 객체를 해제(소멸) 시켜 준다 ) • 자바 프로그램에서는 객체가 사용하던 메모리를 자의적으로 반환 할 수 없으며, 자바 가상 머신이 알아서 메모리를 관리 한다. • 자바 프로그래머는 메모리 관리에 신경 쓰지 않아도 된다. • 객체의 소멸 시기는 객체를 가리키는 레퍼런스 변수가 하나도 없을 때 이다. • 가비지 콜렉팅은 언제 동작 할지 알 수 없다. • “가비지 콜렉팅은 시스템에 자원이 없을 때 , 또는 부하가 작을 때 임의적으로 동작 한다.” • System 클래스의 gd() 정적 메서드의 호출로 카비지 콜렉팅의 요청은 가능하나 언제 발생 할 지는 모른다. System.gc();

  30. 패키지( package ) 유사한 클래스들의 모임 = 클래스의 집합이다. 패키지에 들어있는 클래스를 쉽게 사용하기 위하여 정의 자바의 모든 표준 클래스는 패키지 안에 들어 있다. 표준 클래스가 포함되어 있는 패키지는 java.lang이다. java.lang에는 String과 같이 모든 프로그램에서 사용하는 클래스가 들어있다. 표준 클래스는 묵시적으로 사용가능 하다. 기타 다른 패키지는 명시적으로 포함 시켜주어야 한다.

  31. 패키지화 하기 패키지에 포함할 클래스 파일의 첫 줄에 패키지 문을 정의 한다. package package_name; package Car1; public class Ex007Package { int intSpeed; String strColor; String strCarName; public Ex007Package() { this(5); } ...............................

  32. 패키지 컴파일하기 컴파일 문장은 다음과 같다. javac –d . Ex007Package.java Car1 이라는 폴더가 생성되고 그 곳에 Ex007Package.class 가 생성 되었다. -d option을 사용하지 않으면 현재 디렉토리에 class파일 생성 Ex007Package.java 파일의 위치

  33. 패키지와 디렉토리 패키지의 이름은 저장되어있는 디렉토리 구조와 밀접한 관련이 있다. 클래스 명과 파일명이 일치한다. 패키지 명과 저장되어있는 디렉토리명이 일치한다. 위의 사항이 일치 하지 않으면 참조 할 수 없다. 패키지에 포함할 클래스 파일은 어디에서 컴파일 해도 된다. 하지만 사용 전에는 해당 디렉토리에 복사해 놓아야 한다.

  34. 패키지와 디렉토리 package Car1.Car2; public class Ex007Package {............................... Ex008Package.java 파일의 위치

  35. 패키지를 참조한 코딩 • import package_name.class_name; 문을 이용하여 추가 한다. • 참조 경로에 반드시 class파일이 존재 해야 한다. • 패키지 안의 모든 class을 참조하기 위해서 ‘*’를 사용 할 수 있다.( ‘*’를 사용하기 위해서는 참조 하려는 파일과 같은 경로에 자바 소스 파일이 존재 하면 안 된다 ) • import package_name.*

  36. 패키지를 참조한 코딩 import Car1.Ex007Package; public class Ex009Package { public static void main( String args[] ) { Ex007Package objCar2 = new Ex007Package(); System.out.println("objCar2 속도=" + objCar2.getintSpeed()); } }

  37. 패키지 참조 방법 – CLASSPATH • 참조 하는 파일의 하위 디렉토리가 아니라 특정 경로에 패지지를 모아놓고 참조 할 때 사용한다. • 환경 설정 변수에 다음과 같이 추가 한다. • set CLASSPATH=c:\package;c:\packages • 위와 같이 패키지의 위치를 정의한 후 패키지를 위의 경로에 복사하면 하위 디렉토리에 패키지가 없어도 참조 가능 하다.

  38. 패키지 참조 방법 – classes directory • CLASSPATH환경 변수를 설정 하지 않아도 JDK설치 위치 하위의 아래와 같은 경로에 패키지 Class파일 또는 class파일을 복사하면 참조 가능 하다.( 디렉토리가 없으면 생성 ) • c:\jdk1.3\jre\classes

  39. 패키지 참조 방법 – jar file jar cvf [압축될 파일이름] [압축할 디렉토리 또는 파일] jar cvf Car.jar Car1 위의 명령은 현재 경로에 Car1이라는 디렉토리가 존재 한다. 만들어진 Car.jar 파일을 c:\jdk1.3\jre\lib\ext 디렉토리에 복사 한다. ext 디렉토리에는 jar파일을 복사 한다.

  40. 패키지 참조 방법 – jar file

  41. 가시성 –접근 속성 하나의 클래스를 다른 클래스에서 접근 할 때 접근 여부를 결정하는 방법이다. ( 클래스 멤버에 대한 접근 속성을 지정한다. )

  42. 가시성 –접근 속성 package [class2] [class1] default public protected private [SubClass]

  43. 메소드 다중정의 (1/2) • 메소드 다중정의 (Method Overloading) • 다중정의 된 메소드의 구분 • 메소드가 갖는 매개변수의 개수 • 개수가 같을 경우, 메소드가 갖는 매개변수의 자료형을 이용하여 구분 void f(char n) { … } void f(int n) { … } void f(int i, int j) { … } void f(long n) { … } void f(float n) { … } • 이렇게 메소드 다중 정의에 의해 선언된 메소드는 그 메소드를 호출할 때의 매개변수의 개수 또는 매개변수의 자료형에 따라 동적으로 호출이 이루어집니다. • 메소드를 호출할 때 호출되는 메소드는 실매개변수의 자료형과 가장 가까운 형식매개변수를 갖는 메소드가 호출됩니다.

  44. 메소드 다중정의 (2/2) • 메소드 다중정의 (Method Overloading) 예 class MethodOverloadingTest { public static void main(String args[]) { short i=1; long l=2; f('A'); f(1); f(i); f(l); f(3.141592); } // static void f(char n) { System.out.println(" char: " + n); } static void f(byte n) { System.out.println(" byte: " + n); } static void f(short n) { System.out.println(" short: " + n); } static void f(int n) { System.out.println(" int: " + n); } static void f(long n) { System.out.println(" long: " + n); } static void f(float n) { System.out.println(" float: " + n); } static void f(double n) { System.out.println(" double: " + n); } } /* * Results: D:\JAVA\Exam\07>java MethodOverloadingTest int: 65 int: 1 short: 1 long: 2 double: 3.141592 D:\JAVA\Exam\07> */

  45. 가시성 –접근 속성 package2 package1 package3 [class2] [class1] default public protected private [SubClass]

  46. 오버로딩 ( overloading ) 각 메서드가 고유한 파라미터를 갖는다면 하나의 클래스 내에서 같은 이름의 중복된 매서드를 정의 할 수 있다. 메서드의 이름과 파라미터의 유형 및 순서는 메서드의 특징(signature)을 형성 한다. 리턴 값 유형은 메서드의 특징에 영향을 주지 않는다. 다중 생성자가 오버로딩의 한 예이다.

  47. 오버로딩 ( overloading ) public class Ex010Overloading { ............................. public Ex010Overloading() { intSpeed = 1; } public Ex010Overloading(int intSpeed) { this.intSpeed = intSpeed; }

  48. 오버로딩 ( overloading ) ......................... public void speedUp() { intSpeed ++; } public void speedUp(int i) { intSpeed += i; } ........................

  49. 오버로딩 ( overloading ) ........................ public static void main( String args[] ) { Ex010Overloading objCar2 = new Ex010Overloading(10); objCar2.speedUp(); System.out.println("objCar2 속도 = " + objCar2.intSpeed ); objCar2.speedUp(5); System.out.println("objCar2 속도 = " + objCar2.intSpeed ); } ..........................

More Related