Presentation 6

Download Report

Transcript Presentation 6

OOP presentation 6
OOP Practices
작성자 Kimjinsik
소속
Mobile computing Lab
destiny738.tistory.com
목차
1.
캡슐화(Encapsulation)
2. 계산기 만들기
3. 키워드 : static
4. 연습문제 풀이
1. 캡슐화
- Encapsulation
가루약 싫어서 나 먹지?
내 안에 뭐 있는지 알고 먹어?
캡슐처럼 안쪽의 내용물(데이터, 속성)이 뭔지 모르게 숨긴다.
적당한 메소드를 통해서 외부와 통신을 한다.
 캡슐화에 따른 이익!
 Modularity(모듈화)
- 클래스 하나가 하나의 모듈이 된다.
- 모듈 : 하나의 부품 ( ex. 나사 )
 Information-hiding(정보은닉)
- 정해진 메소드를 제외하고는 객체와 통신이 불가능하다.
- 외부에서는 어떻게 객체가 움직이는지 알 수 없다.
 Code re-use(코드 재사용)
- 모듈화에 따른 부수적인 장점
1. 추가 설명
- Object structure<class variable>
객체가 생성되면 객체의 모든
함수에서 사용가능 한 변수
class Name{
String firstName;
String lastName;
}
<Method>
객체가 생성되면 외부와
통신이 가능하게 한다.
Name(String fName, String lName){
firstName = fName;
lastName = lName;
}
<생성자>
public String returnName(){
객체가 생성될 때 호출
return fristName + “,” + lastName;
객체가 생성될 때 해야
}
할 일을 정의
클래스 변수를 초기화
2. 계산기 만들기
- 다음의 문제를 프로그래밍하라
간단한 계산기를 만들어 보자!
C언어 때 배웠던 계산기를 클래스로 만들어 봅시다.
계산기는 정수형 연산과 실수형 연산이 가능하다.
계산기의 기능으로는 덧셈만 존재한다.
main method에서
3과 4를 더하는 연산
3.3과 4.4를 더하는 연산
을 수행하여 각각의 결과를 출력하라!
2. 계산기 만들기
- Overload : 같은 이름으로 여러 동작!!
class Calculation{
int sumInt(int a, int b){
return a+b;
}
double sumDouble(double a, double b){
return a+b;
}
public static void main(String []args){
Calculation c = new Calculation();
System.out.println(sumInt(3,4));
System.out.println(sumDouble(3.3,4.4);
}
}
2. 계산기 만들기
- Overload : 같은 이름으로 여러 동작!!
class Calculation{
int sum (int a, int b){
return a+b;
}
double sum (double a, double b){
return a+b;
}
public static void main(String []args){
Calculation c = new Calculation();
System.out.println(sum (3,4));
System.out.println(sum (3.3,4.4);
}
}
난 생성자에서
유용하게
사용되지
2. 계산기 만들기
- Overload
<프로그램 확장> 회사가 너무 잘나가서…
외국인도 사용하게 되어 이름 관리시 middle Name도 필요하게 되었다!
class Name{
String firstName;
String middleName;
한국인 무시함?
String lastName;
한국인도 중간이름
만들어?
Name(String fName, String mName, String lName){
firstName = fName;
middleName = mName;
lastName = lName;
}
public String returnName(){
…
도와줘
}
Overload!!
코더
사장
2. 계산기 만들기
- Overload
class Name{
String firstName;
String middleName;
String lastName;
Name(String fName, String mName, String lName){
firstName = fName;
middleName = mName;
lastName = lName;
}
Name(String fName, String lName){
firstName = fName;
middleName = “”;
lastName = lName;
}
….
}
코더
사장
3. Static
- Keyword static
C언어에서의 Static keyword?
void printcount(){
int i = 0;
i++;
printf(“%d”,i);
}
int main(){
printcount();
printcount();
printcount();
printcount();
printcount();
}
void printcount(){
static int i = 0;
i++;
printf(“%d”,i);
} 값이
함수의 특정
지속적으로
메모리에
int main(){
유지시킨다.
printcount();
printcount();
printcount();
printcount();
printcount();
}
3. Static
- Keyword static
Class에서의 Static은 Class에서 생성된 모든 객체가 공유하게 한다.
또한 Static으로 정의된 메소드, 변수는 객체 생성 없이 사용이 가능하다.
Scanner s = new Scanner(System.in);
int number = s.nextInt();
System.out.println(number);
사용자에게 값을 받기 위해서는 Scanner객체를 생성해서 사용했다.
하지만, System.out.println은 어째서 객체 생성 없이 사용이 가능할까?
여러분이 안 궁금하셨을지도 모르겠지만...
이를 설명해드리기 위해서 static을 설명했습니다.
String name = “kimjinsik”;
3. Static
- Static 응용
class Name{
String firstName;
String lastName;
static int i = 0;
i가 의미하는 것은?
Name(String fName, String mName, String lName) {
firstName = fName;
lastName = lName;
i++;
}
public String returnName() {
return fristName + “,” + lastName;
}
…
}
4. 연습문제 풀이
- 문제
학생을 나타내는 Student라는 클래스를 설계하고 구현하라.
학생은 학번, 이름과 세 개의 시험점수들을 가진다.
학생의 학번, 이름, 세 개의 시험점수들을 넘겨 받아 대응하는 변수의 값을 정하
는 Student 객체를 생성하는 생성자 메소드를 작성하라.
시험 번호(1부터 3사이의 정수)와 그 번호에 대응하는 시험 점수를 매개변수로
받아 해당 변수의 값을 변경하는 메소드를 작성하라.
시험 번호를 매개변수로 받아 그 번호에 대응하는 시험점수를 반환하는 메소드
를 작성하라.
세 개의 시험 점수들의 평균을 구하여 반환하는 메소드를 작성하라.
학생의 학번, 이름, 시험 점수들과 시험 평균 점수를 문자열의 형태로 반환하는
메소드를 작성하라.
4. 연습문제 풀이
- 문제
학생을 나타내는 Student라는 클래스를 설계하고 구현하라.
<클래스 이름과 변수>
학생은 학번, 이름과 세 개의 시험점수들을 가진다.
학생의 학번, 이름, 세 개의 시험점수들을 넘겨 받아 대응하는 변수의 값을 정하
<생성자 메소드>
는 Student 객체를 생성하는 생성자 메소드를 작성하라.
시험 번호(1부터 3사이의 정수)와 그 번호에 대응하는 시험 점수를 매개변수로
받아 해당 변수의 값을 변경하는 메소드를 작성하라.
<Set 메소드>
시험 번호를 매개변수로 받아 그 번호에 대응하는 시험점수를 반환하는 메소드
를 작성하라.
<Get 메소드>
세 개의 시험 점수들의 평균을 구하여 반환하는 메소드를 작성하라.
<평균계산 메소드>
학생의 학번, 이름, 시험 점수들과 시험 평균 점수를 문자열의 형태로 반환하는
<toString 메소드>
메소드를 작성하라.
감사합니다!