사용자 도구

사이트 도구


notepad:kamajaki0601

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
notepad:kamajaki0601 [2012/04/05 09:42]
kamajaki0601
notepad:kamajaki0601 [2012/04/06 14:47] (현재)
kamajaki0601
줄 1: 줄 1:
-==== 객체지향 설계 수업 ====+==== 객체지향 설계 ==== 
 ** 4/5일 목 ** ** 4/5일 목 **
  
줄 6: 줄 7:
  
 클레스 상속 캡슐화 다형성 개념\\ 클레스 상속 캡슐화 다형성 개념\\
-/**+
 (1) AvgTest.java (1) AvgTest.java
-*/ 
- 
  
 class Avg { class Avg {
  String name;  String name;
 +
 +name는 문자열의 첫 번째 문자의 주소를 기억하고 있을 참조변수(c에서는 포인터, java에서는 String 클래스에 만들어져 있음)
 +4바이트
  int avg;  int avg;
 +4바이트
 +Avg(){} => 생략되어 있는 생성자(초기화 메소드)
 +클래스명과 동일한 이름 사용함
  public String average(int kor, int eng)  public String average(int kor, int eng)
  {  {
 +
 +메소드(반환형으 String => 문자열의 첫 번째 문자의 주소가 반환됨)
 +매개변수로 kor과 eng
 +
  avg = (kor+eng)/2;  avg = (kor+eng)/2;
 +정수형(왼쪽) = 정수형(오른쪽)
 +
  return name+avg;  return name+avg;
 ++의 의미는 문자열 연결(문자열+정수 => 문자열+문자열)
  }  }
 } }
줄 23: 줄 35:
 public class AvgTest { public class AvgTest {
  public static void main(String[] args) {  public static void main(String[] args) {
 +
 +Static : 객체를 생성하지 않아도 사용할 수 있게 하기 위해서(항상 main()메소드에서 실행이 시작됨) 메모리상에 먼저 올려놓음
 +(String[] args) => (String args[]) => C에서는 (int argc, char* argv[])와 같은 것
 +
 +C프로그램 실행:....>Cpro.exe 123 456
 +
 +=> argv[0]에는 "cpro.exe"에서 'c'의 주소가 들어감
 +=> argv[1]에는 "cpro.exe"에서 '123'의 '1'의 주소가 들어감
 +=> argv[2]에는 "cpro.exe"에서 '456'의 '4'의 주소가 들어감
 +
 +자바 프로그램 실행
 +
 +=>java AvgTest 123 456
 +=> argv[0]에는 "123"에서 '1'의 주소가 들어감
 +=> argv[1]에는 "456"에서 '4'의 주소가 들어감
 +
  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()/calloc()~free()) \\
 +  
  student1.name = "김철수";  student1.name = "김철수";
  student2.name = "김영희";  student2.name = "김영희";
  String st1_avg = student1.average(70,80);  String st1_avg = student1.average(70,80);
 +
 +String st1_avg; \\
 +st1_avg = student1.average(70,80); \\
 +위 두라인을 합친 것
 +
  String st2_avg = student2.average(80,90);  String st2_avg = student2.average(80,90);
  System.out.println(st1_avg);  System.out.println(st1_avg);
줄 33: 줄 78:
  }  }
 } }
 +
 +Q
 +** 컴파일 후 생성되는 파일명 두 개 작성? ** \\
 +** 클래스명과 메소드명에 대한 관례상 작성 방법? ** \\
 +** 출력결과? ** \\ 
 +
 +(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)/2;
 + return name+avg;
 + }
 +}
 +
 +class Avg1Total extends Avg1 {
 +Avg1Total 클래스에 Avg1 클래스의 속성 및 기능, 즉 변수 및 메소드를 상속함 \\
 +java에서는 다중상속을 허용(c++)하지 않음 \\
 +
 +ex)
 +하위클래스 extends 상위클래스, 상위클래스(X)
 +하위 클래스 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,80);
 + String st2_avg = student2.average(80,90);
 + int st1_total = student1.total(70,80);
 + int st2_total = student2.total(80,90);
 + System.out.println(st1_avg+" 총점=" + st1_total);
 + System.out.println(st2_avg+" 총점=" + st2_total);
 + }
 +}
 +
 +(4) AvgTest2.java \\
 +
 +class Avg2 {
 + public String name;
 + private int avg;
 +
 +정보 은폐(외부 노출 안 되게 함) \\
 +
 + public String average(int kor, int eng)
 + {
 + avg = (kor+eng)/2;
 + 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 자필) \\
 +
 +다음 주.. 캡슐화부터 다시 설명(정보 은폐 포함)
notepad/kamajaki0601.1333586555.txt.gz · 마지막으로 수정됨: 2012/04/05 09:42 저자 kamajaki0601