메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve 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) 클래스 (Class) 클래스가 하는 일 / 동작 C언어의 함수와 비슷한 역할을 한다. 클래스의 특징을 나타낼 수 있는 행동이다. 동작/행동을 나타내기 때문에 동사 형태로 나타난다. 클래스 (Class) 유사한 특징을 지닌 객체를 묶어서 그룹 지은 것 클래스에 속하는 실례를 클래스 인스턴스(Class Instance)라고 한다. 생성한 클래스는 인스턴스화를 통해 객체로 생성된다. 일반화 인스턴스 인스턴스 영희 은영 영희 일반화 <class> 사람 인스턴스 <class> 사람 인스턴스 철수 지우 철수 메소드 & 클래스
메소드 & 클래스 생성자 (Constructor) 오버로드 (Overload) 클래스 명과 동일한 이름을 사용하며, 리턴 타입이 없는 함수 객체를 만들어 메모리에 할당하는 함수 객체를 만들 때 객체의 변수를 초기화 하는 역할을 한다. 객체가 생성될 때 꼭 해줘야 하는 일을 정의 오버로드 (Overload) 중복 메소드 동일한 메소드 명이 2개이상 존재 가능 파라미터의 수, 파라미터의 자료형에 따라 자동적으로 선택 실행 함수의 내부가 달라도 된다. 생성자에서 주로 사용된다. int sum_int(int a, int b){ return a+b; } float sum_float(float a, float b){ int sum(int a, int b) return a+b; } double sum(double a, double b){ <<main>> int result1; double result2; result 1 = sum(3,5); result 2 = sum(3,4.6); 메소드 & 클래스
객체지향 프로그래밍 배경 결합도 응집도 C 대규모 프로젝트 진행의 증가 시스템을 작은 서브 시스템으로 나눠서 개발 상대방의 소스 작성과 연관 없이 자신의 기능 개발 모듈 재사용에 대한 관심 증가 결합도가 낮고, 응집도가 높은 모듈의 제작 결합도 모듈과 모듈 사이의 상호 작용 정도 응집도 한 모듈 안의 기능들의 연관성 정도 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 2 관련된 명사끼리 그룹을 나눈다. Step 3 명사가 책임지고 하는 것이 있는지 확인한다. e t c ~에게, ~에 등은 대상을 나타내는 것으로 통신관계를 나타낸다. 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. 메소드/클래스/변수를 설정하는 법
Step 1 메소드/클래스/변수를 설정하는 법 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. Step 1 문제의 명사와 동사를 구분한다. <명사> 사용자 기상청 기상정보 온도 습도정보 <동사> 요청한다 측정한다 종합한다 알려준다 메소드/클래스/변수를 설정하는 법
Step 2 메소드/클래스/변수를 설정하는 법 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. Step 2 관련된 명사끼리 그룹을 나눈다. (명사가 서로 소유하고 있다고 생각하는 것으로 나눈다) <명사1> 사용자 기상정보 <명사2> 기상청 온도 습도정보 <동사> 요청한다 측정한다 종합한다 알려준다 메소드/클래스/변수를 설정하는 법
Step 3 메소드/클래스/변수를 설정하는 법 문제 - 사용자는 기상청에 현재 기상정보를 요청한다. - 기상청은 온도를 측정하고, 습도 정보를 종합하여 사용자에게 알려준다. 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 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > int nameLength() 메소드 1 - 이름 : Name - 변수 ~ fName : 사용자로부터 받은 성 ~ gName : 사용자로부터 받은 이름 - 알고리즘 ~ 설명 : 사용자로부터 받은 값을 이용하여 객체 생성시 데이터를 초기화 한다. 1. familyName = fName 2. givenName = gName 문제 풀이
l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자 메소드 > Name(String fName, gName) l 성을 반환하는 메소드 > String getterFamilyName() l 이름을 반환하는 메소드 > String getterGivenName() l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > int nameLength() 메소드 2 - 이름 : getterFamilyName - 반환 타입 : String - 알고리즘 ~ 설명 : 객체에 저장된 familyName 값을 사용자에게 알려준다. 1. familyName 값 반환 문제 풀이
l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자 메소드 > Name(String fName, gName) l 성을 반환하는 메소드 > String getterFamilyName() l 이름을 반환하는 메소드 > String getterGivenName() l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > int nameLength() 메소드 3 - 이름 : getterGivenName - 반환 타입 : String - 알고리즘 ~ 설명 : 객체에 저장된 givenName 값을 사용자에게 알려준다. 1. givenName 값 반환 문제 풀이
l 사람의 성과 이름을 넘겨 받아 초기화하는 생성자 메소드 > Name(String fName, gName) l 성을 반환하는 메소드 > String getterFamilyName() l 이름을 반환하는 메소드 > String getterGivenName() l 성과 이름 안에 포함된 문자들의 총 수를 되돌려 주는 메소드 > int nameLength() 메소드 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 int nameLength(){ // 이름의 길이 반환 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() n2.getFamilyName() + n2.getGivenName + “길이 : ”+ n2.NameLength() < 객체 생성 > Name n1 = new Name (familyName1, givenName1) Name n2 = new Name end 문제 풀이
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve Q & A 메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve destiny738.tistory.com Kim Jinsik