490 likes | 555 Views
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 + " 입니다 "); }
E N D
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 + "입니다"); } }
목차 • 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) 방법
1 생성자(Constructor) • 생성자 • 클래스로부터 객체가 생성될 때 객체의 초기화 과정을 기술하는 특수한 메소드 • 객체가 생성될 때 무조건 수행 • 객체가 생성될 때 한 번만 수행 [public/private] 클래스이름(매개변수){ ............. 초기화 문장들 ............. } 형식
1 생성자(Constructor) • 생성자 오류 발생, 적합한 생성자가 없다.
1 생성자(Constructor) • 실습예제 생성자로서 초기화 과정 수행 3개의 매개변수로 객체 생성
1 생성자(Constructor) • 프로그램 설명 • 05~10 : 생성자를 정의하였다. 클래스의 이름과 동일한 생성자를 사용하였으며, 매개변수로 받은 값을 자신의 객체 변수에 초기화 과정을 수행하였다. • 14 : Box5 클래스가 3개의 매개변수를 가진 생성자를 가지고 있으므로, 반드시 3개의 매개변수를 지정하여 객체를 생성하여야 한다.
2 생성자 오버로딩(Overloading) • 같은 이름의 생성자를 여러 개 중첩(overloading)하여 사용할 수 있다
2 생성자 오버로딩(Overloading) 매개변수의 개수와 형식에 따라 적합한 생성자 수행
2 생성자 오버로딩(Overloading) • 실습예제 두 개의 생성자를 오버로딩 두 개의 생성자를 오버로딩
2 생성자 오버로딩(Overloading) • 실습예제 생성자의 매개변수에 적합한 생성자 수행
2 생성자 오버로딩(Overloading) • 프로그램 설명 • 00 : 3개의 정수 매개변수를 가진 생성자를 선언하였다. • 00 : 3개의 실수 매개변수를 가진 생성자를오버로딩하여 선언하였다. • 00 : 3개의 정수 매개변수를 가지고 객체를 생성하였다. 정수 매개변수를 가진 생성자가 수행된다. • 00~00 : 3개의 실수 매개변수를 가지고 객체를 생성하였다. 실수 매개변수를 가진 생성자가 수행된다. • 00 : 정수와 실수가 섞여 있는 경우 정수가 자동 형변환되어 실수 매개변수 생성자를 수행한다.
3 예약어this • This • 자바의 예약어(reserved word) • 현재의 객체를 의미
3 예약어this • This 이 객체 변수를 의미
3 예약어this 같은 클래스 내의 다른 생성자 호출
4 메소드 • 메소드 • 객체가 할 수 있는 행동을 정의 • static : 클래스 메소드 • final : 종단 메소드 • abstract : 추상 메소드 • synchronized : 스레드의 동기화를 위한 메소드 [접근 한정자] [static/final/abstract/synchronized] 반환값타입메소드이름([매개변수들]) { ............ 지역변수 선언 및 메소드 행위 기술 ............ } 형식
4 메소드 4-1 접근 한정자 • 메소드 선언 시 사용되는 접근 한정자 • 멤버 변수 접근 한정자와 같이 public, private가 사용 public 멤버 변수 선언 접근 한정자를 지정하지 않고 선언 private 멤버 변수 선언 public 메소드 선언 접근 한정자를 지정하지 않음 private 메소드 선언
4 메소드 4-1 접근 한정자 • 같은 패키지에 속해있는 클래스에서 사용하는 예 접근 가능 접근 불가능 접근 가능 접근 가능 접근 불가능 접근 가능
4 메소드 4-1 접근 한정자 • 다른 패키지에 속해 있는 클래스에서 사용하는 예 접근 가능 접근 불가능 접근 불가능 접근 가능 접근 불가능 접근 불가능
4 메소드 4-1 접근 한정자 • 실습예제 접근 한정자를 사용하지 않고 객체 변수 선언 접근 한정자를 사용하지 않고 메소드 선언
4 메소드 4-1 접근 한정자 • 실습예제 객체 변수에 직접 접근하여 초기화된 변숫값을 고침
4 메소드 4-1 접근 한정자 • 프로그램 설명 • 02~04 : 접근 한정자를 사용하지 않고 객체 변수를 선언하는 것은 보안 부분을 매우 취약하게 하는 요인이다. Box7 클래스가 생성자를 통한 초기화와 부피를 구해서 알려주는 클래스라고 가정하면, 외부에서 그 기능만을 사용할 수 있도록 최소한의 부분만 공개해야 하며, 다른 부분은 접근 한정자를 이용하여 철저히 은폐하여야 한다. • 11~15 : 접근 한정자를 사용하지 않고 메소드가 기술되었다. 실제 부피를 구하는 메소드의 이름은 그 클래스를 사용하는 측에서는 알 필요가 없는 정보이다. 좀 더 철저한 보안을 위해서는 부피를 계산하는 메소드는 접근 한정자에 의해 은폐되어야 하고, 계산된 부피만 알려주는 읽기 전용의 메소드가 필요하다. • 20 : 접근 한정자를 사용하지 않음으로서 발생할 수 있는 잘못 사용된 예이다. width 객체 변수의 접근 한정자를 지정하지 않음으로서 같은 패키지에 속한 다른 클래스에서 자유롭게 그 변수의 값을 조작할 수 있다.
4 메소드 4-1 접근 한정자 • 실습예제 접근 한정자를 사용하지 않고 객체 변수 선언 부피를 구하는 메소드를 private로 선언
4 메소드 4-1 접근 한정자 • 실습예제 부피의 값을 읽어오는 메소드만 public으로 선언 private로 선언된 변수에 접근하면 오류 발생 private로 선언된 메소드에 접근하면 오류 발생
4 메소드 4-1 접근 한정자 • 프로그램 설명 • 02~05 : 클래스 내에 선언되는 모든 객체 변수에 접근 한정자를 사용하며, 공개될 필요가 없는 변수들은 모두 private로 선언하여 객체 변수가 오용되는 것을 방지한다. • 13~16 : 부피를 구하는 메소드의 이름을 공개할 필요가 없다. private로 메소드 선언 • 17~20 : 계산된 부피 값을 읽어오는 전용 메소드를 작성하여 public으로 선언한다. 이렇게 읽기 전용의 메소드를 사용함으로써 보안을 강화할 수 있다. • 25~26 : private로 선언된 객체 변수와 메소드에 접근하면 오류가 발생된다.
4 메소드 4-2 클래스 메소드 • 클래스 메소드 • 클래스 변수와 비슷한 특징을 가짐 클래스 메소드는 클래스 변수만 사용. depth는 객체 변수이므로 오류 발생
4 메소드 4-2 클래스 메소드 • 실습예제 클래스 변수 선언 클래스 메소드 선언(지역 변수 사용 가능)
4 메소드 4-2 클래스 메소드 • 실습예제 클래스 메소드 호출 (클래스 이름 사용) 클래스 메소드 호출 (클래스 이름 사용) 클래스 메소드 호출 (클래스 이름 사용)
4 메소드 4-2 클래스 메소드 • 프로그램 설명 • 07~12 : static을 사용하여 클래스 메소드를 선언하였다. 클래스 메소드 내에서는 객체 변수를 사용할 수 없으나, 클래스 메소드 내부에서만 사용하는 지역 변수는 선언하여 사용할 수 있다. • 17, 19, 24~26 : 클래스 메소드의 호출은 클래스 이름을 통해서 하는 것이 원칙이다. 객체 이름을 통해서도(mybox1.getCurrentID())도 접근이 가능하다.
4 메소드 4-3 final, abstract, synchronized 메소드 • final로 선언된 메소드 • 서브 클래스에서 오버라이딩(overriding)될 수 없음을 의미 • abstract로 선언된 메소드 • 추상 메소드로써 추상 클래스 내에서 선언 • 추상 메소드는 선언 부분만 가지고 몸체 부분은 가질 수 없음 • 몸체 부분은 서브 클래스에서 오버라이딩됨 • synchronized 메소드 • 스레드를 동기화할 수 있는 기법을 제공하기 위해 사용
4 메소드 4-4 메소드 반환 값(return value) • 메소드선언부에는 그 메소드 반환 값의 자료형이 지정되어야 함 • 반환 값이 없을 경우에는 void로 지정 • void형이 아닌 메소드 • 반드시 지정된 형과 같은 값을 return문을 사용하여 반환
4 메소드 4-4 메소드 반환 값(return value)
5 메소드 오버로딩(Overloading) • 메소드 오버로딩 • 객체지향 언어의 특징 중에 하나인 다형성(polymorphism)을 제공 • 하나의 메소드 이름으로 다양한 연산을 수행할 수 있는 방법을 제공 • 중첩된 메소드가 호출되면 매개변수의 형과 개수를 비교하여 적합한 메소드가 실행
5 메소드 오버로딩(Overloading) • 실습예제 데이터형에 적합한 메소드 실행 데이터형에 적합한 메소드 실행 같은 이름의 메소드 오버로딩 선언
5 메소드 오버로딩(Overloading) • 실습예제
5 메소드 오버로딩(Overloading) • 프로그램 설명 • 06, 10 : 생성자에서 같은 이름의 메소드를 호출하고 있지만, 매개변수의 형에 따라 적합한 메소드가 수행된다. • 12~19 : 두 개의 메소드를오버로딩하여 선언하였다. 매개변수의 개수는 같지만, 형이 달라서 오버로딩될 수 있다.
5 메소드 오버로딩(Overloading) • 실습예제 메소드를 오버로딩으로 선언 메소드를 오버로딩으로 선언 메소드를 오버로딩으로 선언 메소드를 오버로딩으로 선언
5 메소드 오버로딩(Overloading) • 실습예제 오버로딩 메소드 호출 오버로딩 메소드 호출 오버로딩 메소드 호출 오버로딩 메소드 호출
5 메소드 오버로딩(Overloading) • 프로그램 설명 • 02~16 : 넓이와 부피를 구하는 메소드calc()를 오버로딩으로 선언하였다. 메소드가 호출되면 매개변수의 개수에 따라 적합한 메소드가 수행된다. • 27, 30, 33, 36 : 적합한 메소드가 호출되어 수행된다.
6 메소드에 값 전달(Argument passing) 방법 • 실 매개변수와 형식 매개변수로 기본 자료형이 사용되는 경우 237 page
6 메소드에 값 전달(Argument passing) 방법 • 매개변수와 형식 매개변수로 참조 자료형이 사용되는 경우 238 page
6 메소드에 값 전달(Argument passing) 방법 • 실습예제 기본 자료형의 값을 변환 배열(참조 자료형)의 요소를 변환 문자열(참조 자료형) 뒤에 문자열을 첨가 매개변수로 받은 데이터를 출력하는 메소드
6 메소드에 값 전달(Argument passing) 방법 • 실습예제 3개의 매개변수로 display() 호출 3개의 매개변수로 change() 호출
6 메소드에 값 전달(Argument passing) 방법 • 프로그램 설명 • 02 : 이 메소드에서는 매개변수로 받은 값을 변환시키고 있다. 첫 번째 값은 기본 자료형의 값이고, 나머지 두 개의 값은 참조 자료형의 값이다. 기본 자료형의 경우 값이 복사되기 때문에 변화를 시켜도 호출한 쪽의 데이터는 변하지 않는 반면, 참조 자료형의경우 주소가 복사되기 때문에 데이터 값을 변환시키면 호출한 쪽의 데이터도 변하게된다. • 07 : 변환되기 전과 변환된 후의 값을 출력시켜주는 메소드 • 24 : 값을 변환시키는 change() 메소드를 호출하였다. • 27 : change() 메소드 호출 후에 다시 출력하였다.
학습정리 • 생성자 • 생성자는 클래스로부터 객체가 생성될 때 초기화 과정을 수행하는 메소드이다. • 생성자를생성자메소드로 부르기도 한다. • 생성자의 이름은 클래스 이름과 동일해야 한다. • 생성자 오버로딩 • 하나의 클래스에 같은 이름의 생성자를 중첩하여 선언하는 것을 생성자 오버로딩이라 한다. • 오버로딩되는생성자는 매개변수의 개수와 타입이 반드시 달라야 한다. • 생성자 오버로딩은 객체지향의 다형성을 구현한다.
학습정리 • 예약어this • this 예약어는 현재의 객체를 의미한다. • this 예약어는클래스내에서 다른 생성자를 호출할 때도 사용된다. • this 예약어를사용함으로서의미있는변수명을 사용할 수 있다. • 메소드와 오버로딩 • 메소드는 클래스의 핵심인 기능을 나타내는 부분이다. • 메소드의 접근 한정자는 객체변수의 접근 한정자의 의미와 같다. • 클래스 메소드는 클래스 이름을 통해 접근 가능하며, 클래스 메소드내에서는 클래스 변수만을 사용할 수 있다. • 메소드는 기본 자료형 뿐만 아니라 참조자료형인 객체도 반환할 수 있다. • 메소드 역시 생성자와 같이 중첩 사용될 수 있으며, 중첩된 메소드는 매개변수의 개수와 타입이 반드시 달라야 한다.
학습정리 • 메소드에 값 전달 기법 • 자바는 메소드 호출 시 매개변수에 값을 전하기 위해 값-전달(call by value) 방법을 사용한다. • 값-전달 기법은 실매개 변수의 값을 형식매개변수에 복사하는 기법이다. • 값-전달 기법에서 사용되는 매개변수의 형이 기본 자료형일 경우에는 실제 값이 복사되어 전달되지만, 참조자료형인 경우에는 주소가 복사되어 전달된다. • 참조자료형인 경우에 주소가 전달되므로 결국 실매개변수와 형식매개변수가 같은 객체를 가리키게 된다. 이 경우 형식매개변수의 값이 변화되면 실매개 변수의 값도 변화된다.
7장. 클래스 : 기능 수고하셨습니다. 질문 있습니까?