210 likes | 313 Views
Java Presentation 5. 메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve. destiny738.tistory.com Kim Jinsik. 목 차. 메소드 & 클래스 개념 (Conception of Method & Class) 객체지향 프로그래밍 (Object oriented programming(OOP)) 메소드 , 클래스 , 변수를 설정하는 법 (How to define classes, methods, variables)
E N D
Java Presentation 5 메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve destiny738.tistory.com Kim Jinsik
목 차 • 메소드& 클래스 개념 (Conception of Method & Class) • 객체지향 프로그래밍(Object oriented programming(OOP)) • 메소드, 클래스, 변수를 설정하는 법(How to define classes, methods, variables) • 문제풀이 (Problem Solve)
메소드& 클래스 • 메소드(Method) • 클래스가 하는 일/ 동작 • C언어의 함수와 비슷한 역할을 한다. • 클래스의 특징을 나타낼 수 있는 행동이다. • 동작/행동을 나타내기 때문에 동사 형태로 나타난다. • 클래스 (Class) • 유사한 특징을 지닌 객체를 묶어서 그룹 지은 것 • 클래스에 속하는 실례를 클래스 인스턴스(Class Instance)라고 한다. • 생성한 클래스는 인스턴스화를 통해 객체로 생성된다. 일반화 인스턴스 인스턴스 영희 은영 영희 <class> 사람 <class> 사람 일반화 인스턴스 인스턴스 철수 지우 철수
메소드& 클래스 • 생성자(Constructor) • 클래스 명과 동일한 이름을 사용하며, 리턴 타입이 없는 함수 • 객체를 만들어 메모리에 할당하는 함수 • 객체를 만들 때 객체의 변수를 초기화 하는 역할을 한다. • 객체가 생성될 때 꼭 해줘야 하는 일을 정의 • 오버로드 (Overload) • 중복 메소드 • 동일한 메소드 명이 2개이상 존재 가능 • 파라미터의 수, 파라미터의자료형에 따라 자동적으로 선택 실행 • 함수의 내부가 달라도 된다. • 생성자에서 주로 사용된다. intsum_int(int a, int b){ return a+b; } float sum_float(float a, float b){ return a+b; } int sum(int a, int b) return a+b; } double sum(double a, double b){ return a+b; } <<main>> int result1; double result2; result 1 = sum(3,5); result 2 = sum(3,4.6);
객체지향 프로그래밍 • 배경 • 대규모 프로젝트 진행의 증가 • 시스템을 작은 서브 시스템으로 나눠서 개발 • 상대방의 소스 작성과 연관 없이 자신의 기능 개발 • 모듈 재사용에 대한 관심 증가 • 결합도가 낮고, 응집도가 높은 모듈의 제작 • 결합도 • 모듈과 모듈 사이의 상호 작용 정도 • 응집도 • 한 모듈 안의 기능들의 연관성 정도 A C X C D Z B Y C C C A A B B D D X Y
객체지향 프로그래밍 • 캡슐화 & 정보 은닉 (Encapsulation & Information Hiding) • 다른 사람은 내가 만든 모듈이 어떻게 돌아가는지 모른다. • 또는, 악의적인 사용을 위해 변수를 바꿀 수 있다. • 자신이 만든 시스템을 원할 하게 동작하기 위해서 외부로의 접근을 제어 • public, private, protected 등의 키워드를 사용 • getter와 setter method를 제공하여 최소한의 변수 접근은 허용 몇몇 안드로이드 게임은 루틴을 하여 변수 변경이 가능 • Overriding, Polymorphism내용은 추후에 다룬다.
메소드/클래스/변수를 설정하는 법 Step 1 문제의 명사와 동사를 구분한다. • 메소드, 클래스, 변수를 설정하는 법 Step 2 관련된 명사끼리 그룹을 나눈다. Step 3 명사가 책임지고 하는 것이 있는지 확인한다. e t c ~에게, ~에 등은 대상을 나타내는 것으로 통신관계를 나타낸다. • 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다.
메소드/클래스/변수를 설정하는 법 • 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. Step 1 문제의 명사와 동사를 구분한다. <명사> 사용자 기상청 기상정보 온도 습도정보 <동사> 요청한다 측정한다 종합한다 알려준다
메소드/클래스/변수를 설정하는 법 Step 2 • 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. 관련된 명사끼리 그룹을 나눈다. (명사가 서로 소유하고 있다고 생각하는 것으로 나눈다) <명사1> 사용자 기상정보 <명사2> 기상청 온도 습도정보 <동사> 요청한다 측정한다 종합한다 알려준다
메소드/클래스/변수를 설정하는 법 Step 3 • 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. 명사가 책임지고 하는 것이 있는지 확인한다. 명사가 하는 행위(동사)가 있는지 확인한다. 하는 행위가 있는 것은 클래스가 될 가능성이 있다. 클래스가 되지 않는 명사는 변수가 된다. <동사> 요청한다 <동사> 측정한다 종합한다 알려준다 <명사1> 사용자 기상정보 <명사2> 기상청 온도 습도정보
메소드/클래스/변수를 설정하는 법 <동사> 요청한다 <동사> 측정한다 종합한다 알려준다 <명사1> 사용자 기상정보 <명사2> 기상청 온도 습도정보 기상청 사용자 온도 습도정보 기상 정보 요청하다 측정한다 종합한다 알려준다
문제 풀이 1.사람의 성명을 모델하는Name 클래스를 설계하고 작성하라 그 클래스는 사람의 성과 이름을 나타내고 다음 메소드들을 가진다: l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자메소드l 성을 반환하는 메소드l 이름을 반환하는 메소드l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 2.문제1에서 작성한 클래스를 시험하는 드라이버(Driver)클래스를 설계한 후 작성하라. 사용자로부터 두 명의 성명(성과 이름)들을 읽어 들인 후 각 성명에 대해 Name 객체를 만들고 각 성명에 대해 성과 이름을 출력하고 이름의 길이를 출력하는 프로그램을 작성하라:
문제 풀이 1.사람의 성명을 모델하는Name 클래스를 설계하고 작성하라 그 클래스는 사람의 성과 이름을 나타내고 다음 메소드들을 가진다: l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자메소드l 성을 반환하는 메소드l 이름을 반환하는 메소드l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 클래스 이름 : Name 클래스 변수 - String FamilyName : 사람의 성을 저장한다. - String GivenName : 사람의 이름을 저장한다.
문제 풀이 l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자메소드 > Name(String fName, gName)l 성을 반환하는 메소드 > String getterFamilyName()l 이름을 반환하는 메소드 > String getterGivenName()l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > intnameLength() 메소드1 - 이름 : Name - 변수 ~ fName : 사용자로부터 받은 성 ~ gName : 사용자로부터 받은 이름 - 알고리즘 ~ 설명 : 사용자로부터 받은 값을 이용하여 객체 생성시 데이터를 초기화 한다. 1. familyName = fName 2. givenName = gName
문제 풀이 l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자메소드 > Name(String fName, gName)l 성을 반환하는 메소드 > String getterFamilyName()l 이름을 반환하는 메소드 > String getterGivenName()l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > intnameLength() 메소드2 - 이름 : getterFamilyName - 반환 타입 : String - 알고리즘 ~ 설명 : 객체에 저장된 familyName값을 사용자에게 알려준다. 1. familyName값 반환
문제 풀이 l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자메소드 > Name(String fName, gName)l 성을 반환하는 메소드 > String getterFamilyName()l 이름을 반환하는 메소드 > String getterGivenName()l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > intnameLength() 메소드3 - 이름 : getterGivenName - 반환 타입 : String - 알고리즘 ~ 설명 : 객체에 저장된 givenName값을 사용자에게 알려준다. 1. givenName값 반환
문제 풀이 l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자메소드 > Name(String fName, gName)l 성을 반환하는 메소드 > String getterFamilyName()l 이름을 반환하는 메소드 > String getterGivenName()l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > intnameLength() 메소드4 - 이름 : nameLength - 반환 타입 : int - 알고리즘 ~ 설명 : string함수 length()를 이용하여 성과 이름의 길이를 구하여 반환한다. 1. “familyName.length() + givenName.length()” 값을 반환한다.
문제 풀이 • 소스코드 class Name{ String familyName; String givenName; Name(String fName, String gName){ // 생성자 familyName = fName; givenName = gName; } public String gatterFamilyName(){ // 이름의 성 반환 return familyName; } public String gatterGivenName(){ // 이름의 이름 반환 return givenName; } public intnameLength(){ // 이름의 길이 반환 return familyName.length() + givenName.length(); } }
문제 풀이 2. 문제 1에서 작성한 클래스를 시험하는 드라이버(Driver) 클래스를 설계한 후 작성하라. 사용자로부터 두 명의 성명(성과 이름)들을 읽어 들인 후 각 성명에 대해 Name 객체를 만들고 각 성명에 대해 성과 이름을 출력하고 이름의 길이를 출력하는 프로그램을 작성하라: • 참고 : 시험하는 클래스는 main method에 모든 것을 구현하면 된다. 클래스 이름 : Driver 메소드1 - 이름 : main - 변수 ~ String familyName1, givenName1 : 사용자에게 사람1의 성명을 받아 저장하는 변수 ~ String familyName2, givenName2 : 사용자에게 사람2의 성명을 받아 저장하는 변수 ~ name1 : 사람 1의 이름 객체 ~ name2 : 사람 2의 이름 객체
문제 풀이 2. 문제 1에서 작성한 클래스를 시험하는 드라이버(Driver) 클래스를 설계한 후 작성하라. 사용자로부터 두 명의 성명(성과 이름)들을 읽어 들인 후 각 성명에 대해 Name 객체를 만들고 각 성명에 대해 성과 이름을 출력하고 이름의 길이를 출력하는 프로그램을 작성하라: • 참고 : 시험하는 클래스는 main method에 모든 것을 구현하면 된다. 메소드1 - 알고리즘 <input> familyName1, givenName1, familyName2, givenName2 start <output> n1.getFamilyName() + n1.getGivenName + “길이 : ”+ n1.NameLength() <output> n2.getFamilyName() + n2.getGivenName + “길이 : ”+ n2.NameLength() < 객체 생성 > Name n1 = new Name (familyName1, givenName1) Name n2 = new Name (familyName1, givenName1) end
Q & A 메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve destiny738.tistory.com Kim Jinsik