문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
notepad:kamajaki0601 [2012/04/05 09:57] kamajaki0601 |
notepad:kamajaki0601 [2012/04/06 14:47] (현재) kamajaki0601 |
||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ==== 객체지향 설계 | + | ==== 객체지향 설계 ==== |
** 4/5일 목 ** | ** 4/5일 목 ** | ||
줄 11: | 줄 12: | ||
class Avg { | class Avg { | ||
String name; | String name; | ||
- | name는 문자열의 첫 번째 문자의 주소를 기억하고 있을 참조변수(c에서는 포인터, java에서는 String 클래스에 만들어져 있음) | ||
+ | name는 문자열의 첫 번째 문자의 주소를 기억하고 있을 참조변수(c에서는 포인터, java에서는 String 클래스에 만들어져 있음) | ||
+ | 4바이트 | ||
int avg; | int avg; | ||
4바이트 | 4바이트 | ||
+ | Avg(){} => 생략되어 있는 생성자(초기화 메소드) | ||
+ | 클래스명과 동일한 이름 사용함 | ||
public String average(int kor, int eng) | public String average(int kor, int eng) | ||
{ | { | ||
+ | |||
메소드(반환형으 String => 문자열의 첫 번째 문자의 주소가 반환됨) | 메소드(반환형으 String => 문자열의 첫 번째 문자의 주소가 반환됨) | ||
매개변수로 kor과 eng | 매개변수로 kor과 eng | ||
+ | |||
avg = (kor+eng)/ | avg = (kor+eng)/ | ||
정수형(왼쪽) = 정수형(오른쪽) | 정수형(왼쪽) = 정수형(오른쪽) | ||
+ | |||
return name+avg; | return name+avg; | ||
+의 의미는 문자열 연결(문자열+정수 => 문자열+문자열) | +의 의미는 문자열 연결(문자열+정수 => 문자열+문자열) | ||
줄 30: | 줄 37: | ||
Static : 객체를 생성하지 않아도 사용할 수 있게 하기 위해서(항상 main()메소드에서 실행이 시작됨) 메모리상에 먼저 올려놓음 | Static : 객체를 생성하지 않아도 사용할 수 있게 하기 위해서(항상 main()메소드에서 실행이 시작됨) 메모리상에 먼저 올려놓음 | ||
- | (String[] args) => (String args[]) => C에서는 (int argc, char* argv[]와 같은 것 | + | (String[] args) => (String args[]) => C에서는 (int argc, char* argv[])와 같은 것 |
+ | |||
+ | C프로그램 실행: | ||
+ | |||
+ | => argv[0]에는 " | ||
+ | => argv[1]에는 " | ||
+ | => argv[2]에는 " | ||
+ | |||
+ | 자바 프로그램 실행 | ||
+ | |||
+ | =>java AvgTest 123 456 | ||
+ | => argv[0]에는 " | ||
+ | => argv[1]에는 " | ||
Avg student1 = new Avg(); | Avg student1 = new Avg(); | ||
+ | |||
+ | Avg student1; 와 student1 = new Avg(); 두 줄 합친 것 | ||
+ | |||
Avg student2 = new Avg(); | Avg student2 = new Avg(); | ||
+ | |||
+ | Avg student2; 와 student2 = new Avg(); 두 줄 합친 것 | ||
+ | |||
+ | (1) Avg student2; 는 Avg 클래스의 주소가 기억될 참조변수 student2를 선언함 \\ | ||
+ | (2) Avg()는 생성자(객체를 초기화하는 메소드) 호출 \\ | ||
+ | (3) new Avg() => Avg 클래스의 객체를 생성하면서 Avg를 통해서 초기화함(메모리에 잡힘) \\ | ||
+ | (4) student2 = new Avg(); => 메모리에 잡힌 객체의 주소를 student2에 할당(배정, | ||
+ | c++에서는 new를 사용하면 반드시 delete(동적할댕했던 힙 영역의 메모리 해제)를 같이 사용해야 함(c에서는 malloc()/ | ||
+ | | ||
student1.name = " | student1.name = " | ||
student2.name = " | student2.name = " | ||
String st1_avg = student1.average(70, | String st1_avg = student1.average(70, | ||
+ | |||
+ | String st1_avg; \\ | ||
+ | st1_avg = student1.average(70, | ||
+ | 위 두라인을 합친 것 | ||
+ | |||
String st2_avg = student2.average(80, | String st2_avg = student2.average(80, | ||
System.out.println(st1_avg); | System.out.println(st1_avg); | ||
줄 47: | 줄 83: | ||
** 클래스명과 메소드명에 대한 관례상 작성 방법? ** \\ | ** 클래스명과 메소드명에 대한 관례상 작성 방법? ** \\ | ||
** 출력결과? | ** 출력결과? | ||
+ | |||
+ | (2-참고) 아래 프로그램 작성 \\ | ||
+ | => 안방과 거실에서 TV를 켬 \\ | ||
+ | => 안방에서는 9번, 거실에서는 6번 시청 중 \\ | ||
+ | => 안방에서는 11번으로 채널 바꿈 \\ | ||
+ | => 거실에서는 5번으로 채널 바꿈 \\ | ||
+ | => 거실에서 TV를 시청하던 여러분은 공부하기 위해서 \\ | ||
+ | TV를 끄고 방으로 들어감 \\ | ||
+ | |||
+ | TvTest.java | ||
+ | |||
+ | class Tv { | ||
+ | String color; | ||
+ | boolean power; | ||
+ | int channel; | ||
+ | |||
+ | void power() { power= !power; } | ||
+ | void channelUp { ||channel; } | ||
+ | void channelDown() { --channel;} | ||
+ | } | ||
+ | |||
+ | class TvTest { | ||
+ | public static void main(String args[]) { | ||
+ | |||
+ | 각자작성 \\ | ||
+ | 안방tv는 켜진 상태, 거실tv는 꺼진 상태임을 확인하는 코드 작성 \\ | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | => 출력결과 \\ | ||
+ | |||
+ | (4) AvgTest1.java \\ | ||
+ | |||
+ | class Avg1 { | ||
+ | String name; | ||
+ | int avg; | ||
+ | public String average(int kor, int eng) | ||
+ | { | ||
+ | avg = (kor+eng)/ | ||
+ | return name+avg; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Avg1Total extends Avg1 { | ||
+ | Avg1Total 클래스에 Avg1 클래스의 속성 및 기능, 즉 변수 및 메소드를 상속함 \\ | ||
+ | java에서는 다중상속을 허용(c++)하지 않음 \\ | ||
+ | |||
+ | ex) | ||
+ | 하위클래스 extends 상위클래스, | ||
+ | 하위 클래스 extends 상위클래스 (O) | ||
+ | |||
+ | |||
+ | public int total(int kor, int eng) | ||
+ | { | ||
+ | int score = kor + eng; | ||
+ | return score; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Avg1Total의 객체가 생성되었을 경우 사용 가능한 것 \\ | ||
+ | => name, avg (상위클래스의 변수들) \\ | ||
+ | => Average(int kor, int eng) (상위클래스의 메소드) \\ | ||
+ | => total(int kor, int eng) \\ | ||
+ | |||
+ | public class AvgTest1 { | ||
+ | public static void main(String[] args) { | ||
+ | Avg1Total student1 = new Avg1Total(); | ||
+ | Avg1Total student2 = new Avg1Total(); | ||
+ | student1.name = " | ||
+ | student2.name = " | ||
+ | String st1_avg = student1.average(70, | ||
+ | String st2_avg = student2.average(80, | ||
+ | int st1_total = student1.total(70, | ||
+ | int st2_total = student2.total(80, | ||
+ | System.out.println(st1_avg+" | ||
+ | System.out.println(st2_avg+" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | (4) AvgTest2.java \\ | ||
+ | |||
+ | class Avg2 { | ||
+ | public String name; | ||
+ | private int avg; | ||
+ | |||
+ | 정보 은폐(외부 노출 안 되게 함) \\ | ||
+ | |||
+ | public String average(int kor, int eng) | ||
+ | { | ||
+ | avg = (kor+eng)/ | ||
+ | return name+avg; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public class AvgTest2 { | ||
+ | public static void main(String[] args) { | ||
+ | Avg2 student1 = new Avg2(); | ||
+ | student1.name = " | ||
+ | student1.avg = 100; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 에러 => 복사/ | ||
+ | 애러 나오는 이유 작성 \\ | ||
+ | 에러 나오지 않도록 수정한 후 출력 결과 나올 수 있도록 프로그램 수정(이름 평균 출력) \\ | ||
+ | |||
+ | 접근 제어 | ||
+ | 접근 상세자에게 허용된 접근 단계 \\ | ||
+ | |||
+ | ^ 상세자 |^클레스 |^서브클래스 |^패키지 |^그외 |^ | ||
+ | ^ private | ||
+ | ^ protected | ||
+ | ^ public | ||
+ | ^ package | ||
+ | |||
+ | =>같은 패치지내에서 클래스와 서브 클래스의 동작 의미파악 \\ | ||
+ | =>다른 패키지에서 클래스와 서브 클래스의 동작 \\ | ||
+ | |||
+ | 다른 클래스 | ||
+ | |||
+ | 주소 : moham@paran.com \\ | ||
+ | 제목 : 객체-본인이름-0405 \\ | ||
+ | 내용 : 위의 내용 붙여넣기 \\ | ||
+ | 과제 : 오늘 자정(24시) 이후 블로그에서 확인(A4 자필) \\ | ||
+ | |||
+ | 다음 주.. 캡슐화부터 다시 설명(정보 은폐 포함) |