1 / 49

7 장 . 클래스 : 기능

7 장 . 클래스 : 기능. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); }

Download Presentation

7 장 . 클래스 : 기능

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. 7장. 클래스 : 기능 Java public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println("두수의 합은 " + sum + "입니다"); } }

  2. 학습목표

  3. 목차 • section 1 생성자(Constructor) • section 2 생성자 오버로딩(Overloading) • section 3 예약어this • section 4 메소드 • 4-1 접근 한정자 • 4-2 클래스 메소드 • 4-3 final, abstract, synchronized 메소드 • 4-4 메소드 반환 값(return value) • section 5 메소드 오버로딩(Overloading) • section 6 메소드에 값 전달(Argument passing) 방법

  4. 1 생성자(Constructor) • 생성자 • 클래스로부터 객체가 생성될 때 객체의 초기화 과정을 기술하는 특수한 메소드 • 객체가 생성될 때 무조건 수행 • 객체가 생성될 때 한 번만 수행 [public/private] 클래스이름(매개변수){ ............. 초기화 문장들 ............. } 형식

  5. 1 생성자(Constructor) • 생성자 오류 발생, 적합한 생성자가 없다.

  6. 1 생성자(Constructor) • 실습예제 생성자로서 초기화 과정 수행 3개의 매개변수로 객체 생성

  7. 1 생성자(Constructor) • 프로그램 설명 • 05~10 : 생성자를 정의하였다. 클래스의 이름과 동일한 생성자를 사용하였으며, 매개변수로 받은 값을 자신의 객체 변수에 초기화 과정을 수행하였다. • 14 : Box5 클래스가 3개의 매개변수를 가진 생성자를 가지고 있으므로, 반드시 3개의 매개변수를 지정하여 객체를 생성하여야 한다.

  8. 2 생성자 오버로딩(Overloading) • 같은 이름의 생성자를 여러 개 중첩(overloading)하여 사용할 수 있다

  9. 2 생성자 오버로딩(Overloading) 매개변수의 개수와 형식에 따라 적합한 생성자 수행

  10. 2 생성자 오버로딩(Overloading) • 실습예제 두 개의 생성자를 오버로딩 두 개의 생성자를 오버로딩

  11. 2 생성자 오버로딩(Overloading) • 실습예제 생성자의 매개변수에 적합한 생성자 수행

  12. 2 생성자 오버로딩(Overloading) • 프로그램 설명 • 00 : 3개의 정수 매개변수를 가진 생성자를 선언하였다. • 00 : 3개의 실수 매개변수를 가진 생성자를오버로딩하여 선언하였다. • 00 : 3개의 정수 매개변수를 가지고 객체를 생성하였다. 정수 매개변수를 가진 생성자가 수행된다. • 00~00 : 3개의 실수 매개변수를 가지고 객체를 생성하였다. 실수 매개변수를 가진 생성자가 수행된다. • 00 : 정수와 실수가 섞여 있는 경우 정수가 자동 형변환되어 실수 매개변수 생성자를 수행한다.

  13. 3 예약어this • This • 자바의 예약어(reserved word) • 현재의 객체를 의미

  14. 3 예약어this • This 이 객체 변수를 의미

  15. 3 예약어this 같은 클래스 내의 다른 생성자 호출

  16. 4 메소드 • 메소드 • 객체가 할 수 있는 행동을 정의 • static : 클래스 메소드 • final : 종단 메소드 • abstract : 추상 메소드 • synchronized : 스레드의 동기화를 위한 메소드 [접근 한정자] [static/final/abstract/synchronized] 반환값타입메소드이름([매개변수들]) { ............ 지역변수 선언 및 메소드 행위 기술 ............ } 형식

  17. 4 메소드 4-1 접근 한정자 • 메소드 선언 시 사용되는 접근 한정자 • 멤버 변수 접근 한정자와 같이 public, private가 사용 public 멤버 변수 선언 접근 한정자를 지정하지 않고 선언 private 멤버 변수 선언 public 메소드 선언 접근 한정자를 지정하지 않음 private 메소드 선언

  18. 4 메소드 4-1 접근 한정자 • 같은 패키지에 속해있는 클래스에서 사용하는 예 접근 가능 접근 불가능 접근 가능 접근 가능 접근 불가능 접근 가능

  19. 4 메소드 4-1 접근 한정자 • 다른 패키지에 속해 있는 클래스에서 사용하는 예 접근 가능 접근 불가능 접근 불가능 접근 가능 접근 불가능 접근 불가능

  20. 4 메소드 4-1 접근 한정자 • 실습예제 접근 한정자를 사용하지 않고 객체 변수 선언 접근 한정자를 사용하지 않고 메소드 선언

  21. 4 메소드 4-1 접근 한정자 • 실습예제 객체 변수에 직접 접근하여 초기화된 변숫값을 고침

  22. 4 메소드 4-1 접근 한정자 • 프로그램 설명 • 02~04 : 접근 한정자를 사용하지 않고 객체 변수를 선언하는 것은 보안 부분을 매우 취약하게 하는 요인이다. Box7 클래스가 생성자를 통한 초기화와 부피를 구해서 알려주는 클래스라고 가정하면, 외부에서 그 기능만을 사용할 수 있도록 최소한의 부분만 공개해야 하며, 다른 부분은 접근 한정자를 이용하여 철저히 은폐하여야 한다. • 11~15 : 접근 한정자를 사용하지 않고 메소드가 기술되었다. 실제 부피를 구하는 메소드의 이름은 그 클래스를 사용하는 측에서는 알 필요가 없는 정보이다. 좀 더 철저한 보안을 위해서는 부피를 계산하는 메소드는 접근 한정자에 의해 은폐되어야 하고, 계산된 부피만 알려주는 읽기 전용의 메소드가 필요하다. • 20 : 접근 한정자를 사용하지 않음으로서 발생할 수 있는 잘못 사용된 예이다. width 객체 변수의 접근 한정자를 지정하지 않음으로서 같은 패키지에 속한 다른 클래스에서 자유롭게 그 변수의 값을 조작할 수 있다.

  23. 4 메소드 4-1 접근 한정자 • 실습예제 접근 한정자를 사용하지 않고 객체 변수 선언 부피를 구하는 메소드를 private로 선언

  24. 4 메소드 4-1 접근 한정자 • 실습예제 부피의 값을 읽어오는 메소드만 public으로 선언 private로 선언된 변수에 접근하면 오류 발생 private로 선언된 메소드에 접근하면 오류 발생

  25. 4 메소드 4-1 접근 한정자 • 프로그램 설명 • 02~05 : 클래스 내에 선언되는 모든 객체 변수에 접근 한정자를 사용하며, 공개될 필요가 없는 변수들은 모두 private로 선언하여 객체 변수가 오용되는 것을 방지한다. • 13~16 : 부피를 구하는 메소드의 이름을 공개할 필요가 없다. private로 메소드 선언 • 17~20 : 계산된 부피 값을 읽어오는 전용 메소드를 작성하여 public으로 선언한다. 이렇게 읽기 전용의 메소드를 사용함으로써 보안을 강화할 수 있다. • 25~26 : private로 선언된 객체 변수와 메소드에 접근하면 오류가 발생된다.

  26. 4 메소드 4-2 클래스 메소드 • 클래스 메소드 • 클래스 변수와 비슷한 특징을 가짐 클래스 메소드는 클래스 변수만 사용. depth는 객체 변수이므로 오류 발생

  27. 4 메소드 4-2 클래스 메소드 • 실습예제 클래스 변수 선언 클래스 메소드 선언(지역 변수 사용 가능)

  28. 4 메소드 4-2 클래스 메소드 • 실습예제 클래스 메소드 호출 (클래스 이름 사용) 클래스 메소드 호출 (클래스 이름 사용) 클래스 메소드 호출 (클래스 이름 사용)

  29. 4 메소드 4-2 클래스 메소드 • 프로그램 설명 • 07~12 : static을 사용하여 클래스 메소드를 선언하였다. 클래스 메소드 내에서는 객체 변수를 사용할 수 없으나, 클래스 메소드 내부에서만 사용하는 지역 변수는 선언하여 사용할 수 있다. • 17, 19, 24~26 : 클래스 메소드의 호출은 클래스 이름을 통해서 하는 것이 원칙이다. 객체 이름을 통해서도(mybox1.getCurrentID())도 접근이 가능하다.

  30. 4 메소드 4-3 final, abstract, synchronized 메소드 • final로 선언된 메소드 • 서브 클래스에서 오버라이딩(overriding)될 수 없음을 의미 • abstract로 선언된 메소드 • 추상 메소드로써 추상 클래스 내에서 선언 • 추상 메소드는 선언 부분만 가지고 몸체 부분은 가질 수 없음 • 몸체 부분은 서브 클래스에서 오버라이딩됨 • synchronized 메소드 • 스레드를 동기화할 수 있는 기법을 제공하기 위해 사용

  31. 4 메소드 4-4 메소드 반환 값(return value) • 메소드선언부에는 그 메소드 반환 값의 자료형이 지정되어야 함 • 반환 값이 없을 경우에는 void로 지정 • void형이 아닌 메소드 • 반드시 지정된 형과 같은 값을 return문을 사용하여 반환

  32. 4 메소드 4-4 메소드 반환 값(return value)

  33. 5 메소드 오버로딩(Overloading) • 메소드 오버로딩 • 객체지향 언어의 특징 중에 하나인 다형성(polymorphism)을 제공 • 하나의 메소드 이름으로 다양한 연산을 수행할 수 있는 방법을 제공 • 중첩된 메소드가 호출되면 매개변수의 형과 개수를 비교하여 적합한 메소드가 실행

  34. 5 메소드 오버로딩(Overloading) • 실습예제 데이터형에 적합한 메소드 실행 데이터형에 적합한 메소드 실행 같은 이름의 메소드 오버로딩 선언

  35. 5 메소드 오버로딩(Overloading) • 실습예제

  36. 5 메소드 오버로딩(Overloading) • 프로그램 설명 • 06, 10 : 생성자에서 같은 이름의 메소드를 호출하고 있지만, 매개변수의 형에 따라 적합한 메소드가 수행된다. • 12~19 : 두 개의 메소드를오버로딩하여 선언하였다. 매개변수의 개수는 같지만, 형이 달라서 오버로딩될 수 있다.

  37. 5 메소드 오버로딩(Overloading) • 실습예제 메소드를 오버로딩으로 선언 메소드를 오버로딩으로 선언 메소드를 오버로딩으로 선언 메소드를 오버로딩으로 선언

  38. 5 메소드 오버로딩(Overloading) • 실습예제 오버로딩 메소드 호출 오버로딩 메소드 호출 오버로딩 메소드 호출 오버로딩 메소드 호출

  39. 5 메소드 오버로딩(Overloading) • 프로그램 설명 • 02~16 : 넓이와 부피를 구하는 메소드calc()를 오버로딩으로 선언하였다. 메소드가 호출되면 매개변수의 개수에 따라 적합한 메소드가 수행된다. • 27, 30, 33, 36 : 적합한 메소드가 호출되어 수행된다.

  40. 6 메소드에 값 전달(Argument passing) 방법 • 실 매개변수와 형식 매개변수로 기본 자료형이 사용되는 경우 237 page

  41. 6 메소드에 값 전달(Argument passing) 방법 • 매개변수와 형식 매개변수로 참조 자료형이 사용되는 경우 238 page

  42. 6 메소드에 값 전달(Argument passing) 방법 • 실습예제 기본 자료형의 값을 변환 배열(참조 자료형)의 요소를 변환 문자열(참조 자료형) 뒤에 문자열을 첨가 매개변수로 받은 데이터를 출력하는 메소드

  43. 6 메소드에 값 전달(Argument passing) 방법 • 실습예제 3개의 매개변수로 display() 호출 3개의 매개변수로 change() 호출

  44. 6 메소드에 값 전달(Argument passing) 방법 • 프로그램 설명 • 02 : 이 메소드에서는 매개변수로 받은 값을 변환시키고 있다. 첫 번째 값은 기본 자료형의 값이고, 나머지 두 개의 값은 참조 자료형의 값이다. 기본 자료형의 경우 값이 복사되기 때문에 변화를 시켜도 호출한 쪽의 데이터는 변하지 않는 반면, 참조 자료형의경우 주소가 복사되기 때문에 데이터 값을 변환시키면 호출한 쪽의 데이터도 변하게된다. • 07 : 변환되기 전과 변환된 후의 값을 출력시켜주는 메소드 • 24 : 값을 변환시키는 change() 메소드를 호출하였다. • 27 : change() 메소드 호출 후에 다시 출력하였다.

  45. 6 메소드에 값 전달(Argument passing) 방법

  46. 학습정리 • 생성자 • 생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 수행하는 메소드이다. • 생성자를생성자메소드로 부르기도 한다. • 생성자의 이름은 클래스 이름과 동일해야 한다. • 생성자 오버로딩 • 하나의 클래스에 같은 이름의 생성자를 중첩하여 선언하는 것을 생성자 오버로딩이라 한다. • 오버로딩되는생성자는 매개변수의 개수와 타입이 반드시 달라야 한다. • 생성자 오버로딩은 객체지향의 다형성을 구현한다.

  47. 학습정리 • 예약어this • this 예약어는 현재의 객체를 의미한다. • this 예약어는클래스내에서 다른 생성자를 호출할 때도 사용된다. • this 예약어를사용함으로서의미있는변수명을 사용할 수 있다. • 메소드와 오버로딩 • 메소드는 클래스의 핵심인 기능을 나타내는 부분이다. • 메소드의 접근 한정자는 객체변수의 접근 한정자의 의미와 같다. • 클래스 메소드는 클래스 이름을 통해 접근 가능하며, 클래스 메소드내에서는 클래스 변수만을 사용할 수 있다. • 메소드는 기본 자료형 뿐만 아니라 참조자료형인 객체도 반환할 수 있다. • 메소드 역시 생성자와 같이 중첩 사용될 수 있으며, 중첩된 메소드는 매개변수의 개수와 타입이 반드시 달라야 한다.

  48. 학습정리 • 메소드에 값 전달 기법 • 자바는 메소드 호출 시 매개변수에 값을 전하기 위해 값-전달(call by value) 방법을 사용한다. • 값-전달 기법은 실매개 변수의 값을 형식매개변수에 복사하는 기법이다. • 값-전달 기법에서 사용되는 매개변수의 형이 기본 자료형일 경우에는 실제 값이 복사되어 전달되지만, 참조자료형인 경우에는 주소가 복사되어 전달된다. • 참조자료형인 경우에 주소가 전달되므로 결국 실매개변수와 형식매개변수가 같은 객체를 가리키게 된다. 이 경우 형식매개변수의 값이 변화되면 실매개 변수의 값도 변화된다.

  49. 7장. 클래스 : 기능 수고하셨습니다. 질문 있습니까?

More Related