'C'에 해당되는 글 116건

  1. 2007.11.05 객체지향 by 청웨일
  2. 2007.11.05 C와도 관련깊은 JAVA의 기본 by 청웨일
  3. 2007.11.05 Object 클래스 by 청웨일
  4. 2007.11.05 자바 교재 by 청웨일
  5. 2007.11.05 다형성 by 청웨일

객체지향

C/Java : 2007. 11. 5. 16:50

1. 코드의 재사용성이 높다.

2. 코드의 관리가 용이하다.

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.


클래스 - 객체를 정의한 것, 객체를 생성하는데 사용된다.

객체 - 실제로 존재하는 것, 사물 또는 개념, 객체가 가진 기능과 속성에 따라 다르다.

인스턴스화 - 클래스로부터 객체(인스턴스)를 생성하는 과정


객체의 구성요소

        - 속성 (멤버변수, 특성, 필드, 상태)

        - 기능 (메서드, 행위, 함수)


멤버변수와 메서드를 선언하는데 있어서 순서는 관계없지만

메서드보다 변수를 먼저 선언하고 끼리끼리 모아놓는것이 일반적이다.

인스턴스(객체)는 참조변수(t)를 통해서만 다룰 수 있으며 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

참조변수에는 하나의 값(주소)만 저장될수 있다.

하나의 인스턴스를 두개의 참조변수가 가리키는 것은 가능하지만

하나의 참조변수가 두개의 인스턴스를 가리킬 수는 없다.



public class TvTest {
 public static void main(String[] args) {
  Tv t;                               //Tv인스턴스를 참조하기 위한 변수 t 선언
  t = new Tv();               //Tv인스턴스 생성
  t.channel = 7;              //Tv인스턴스의 멤버변수 channel 에 7저장
  t.channelDown();         //Tv인스턴스의 channelDown() 호출
  System.out.println("현재 채널은 " + t.channel + " 입니다.");
 }
}


class Tv {
 String Color;
 boolean power;
 int channel;
 
 void power() {
  power = !power;
 }
 void channelUp() {
  ++channel;
 }
 void channelDown() {
  --channel;
 }
}

Posted by 청웨일
변수



연산자



조건문과 반복문



배열


Posted by 청웨일

Object 클래스

C/Java : 2007. 11. 5. 16:02

자바에서 모든 클래스는 Object 라는 클래스를 확장한 것이다.


명시적으로 다른 클래스를 확장하지 않은 클래스는 자동으로 Object를 확장한 클래스로 정의 된다.


Object 유형의 객체를 만들수는 있지만 실제로 만들 일은 별로 없다.

 

새로 만드는 클래스는 무조건 Object 클래스의 모든 메소드를 상속 받게 된다.


1) equals(Object o)

        Dog a= new Dog();

        Cat c = new Cat();

        if(a.equals(c)) {

                System.out.println("ture");

        } else {

                System.out.println("false");

        }

- 두 객체를 '같은' 것으로 볼수 있을지 판단하는 메소드


2) getClass()

        Cat c = new Cat();

        System.out.println(c.getClass());

- 어떤 클래스의 인스턴스인지 알 수 있도록 그 객체의 클래스를 리턴


3) hashCode()

        Cat c = new Cat();

        System.out.println(c.hashCode());

- 그 객체에 해당하는 해시코드를 출력


4) toString()

        Cat c = new Cat();

        System.out.println(c.toString());

- 클래스명과 몇가지 별로 잘 쓰이지 않는 숫자가 포함된 String메시지를 출력




Object 유형의 다형적 레퍼런스


//Dog로 집어넣도록 하고 Dog로 저장하고 나중에 꺼낼때도 Dog가 된다.

ArrayList<Dog> myDogArrayList = new ArrayList<Dog>();

                                                //Dog 객체를 저장하도록 선언된 ArrayList 생성

Dog aDog = new Dog();              //Dog 객체 생성

myDogArrayList.add(aDog);          //Dog객체를 목록에 추가

Dog d = myDogArrayList.get(o);   //목록에 들어있는 Dog를 새로운 Dog레퍼런스 변수에 대입
                                                  ArrayList<Dog>라고 했기 때문에
                                                  get()메소드의 리턴 유형도 Dog로 선언되었다.

 

ArrayList<Object> myDogArrayList = new ArrayList<Object>();

                                                      //Dog 객체를 저장하도록 선언된 ArrayList 생성

Dog aDog = new Dog();                    //Dog 객체 생성

myDogArrayList.add(aDog);                //Dog객체를 목록에 추가

>Dog d = myDogArrayList.get(o);      // error
                                                       get()메소드의 리턴형도 Object가 된다.

 

모든것을 다형적인 Object유형으로 처리하면 객체가 그 객체의 성질을 잊어버린 것 같이 보인다.

그 객체의 특성을 잃는다.

Object 유형으로 선언된 변수로 참조되는 객체를 실제 객체의 유형으로 선언된 변수에 대입할 수 없다.

Posted by 청웨일

자바 교재

C/Java : 2007. 11. 5. 16:00
사용자 삽입 이미지

-문법 정도는 좀 떼고 보는 것도 좋을듯.



사용자 삽입 이미지

- 초보자용 문법
Posted by 청웨일

다형성

C/Java : 2007. 11. 5. 15:55

상속과 아주 밀접한 관계를 갖는다.

상위 클래스는 역참조변수(레퍼런스)를 사용하여 하위 클래스의 객체에 관여 할수 있다.

추상클래스로 객체를 생성할수 없다.(abstract로 생성불가 하도록 제한할수 있다.)

추상 클래스는 하위 클래스로 확장 되어야 한다.

더 이상 확장되지 않는 말단 클래스는 구상 클래스이다.

추상 클래스 안에는 추상 메소드와 일반 메소드가 공존할수 있다.

추상 메소드를 넣으려면 그 클래스는 추상클래스여야 한다.

추상 메소드는 메소드의 이름까지만 선언해 주면 된다.

추상 메소드의 내용은 구상 클래스에서 반드시 오버라이딩하여 정의(구현) 되어야만 한다.

추상메소드의 생성은 오버라이드하겠다는 의미와 같다.

상위 클래스유형을 메소드의 인자, 리턴유형, 배열유형으로 쓸수 있게 하는 것이 다형성이다.

상위클래스 유형에 속하는 하위클래스 유형에는 모든 상위 클래스의 메소드가 있어야 한다.(상속)



- 한 타입의 참조변수로 여러 타입의 객체를 참조 할 수 있도록 함.


참조변수의 형변환

- 캐스트연산자를 사용하여 상속관계에 있는 클래스 타입의 참조변수간 형변환을 자유롭게 수행할수 있다.

- 참조변수가 참조하는 인스턴스의 타입보다 자손타입으로의 형변환은 불가한다.


public class CastingTest1 {
 public static void main(String[] atgs) {
  Car car = null;
  FireEngine fe = new FireEngine();   //FireEngine타입참조변수 fe
  FireEngine fe2 = null;
 
  fe.water();
  car = fe;   //car=(car)fe;  형변환 생략   fe가 참조하는 인스턴스를 car이 참조하도록 한다
//  car.water();             //Car 타입의 참조변수로 water()를 호출할수 없다.
 
  fe2 = (FireEngine)car;         //형변환   car가 참조하는 인스턴스를 fe2가 참조한다.
  fe2.water();
  fe2.drive();
  fe.stop();
 }
}


class Car {
 String color;
 int door;
 void drive() {
  System.out.println("drive, Brrrr~");
 }

 void stop() {
  System.out.println("stop!!!");
 }
}


class FireEngine extends Car {
 void water() {
  System.out.println("water!!!");
 }
}


instenceof 연산자

- 참조변수가 참조하고 있는 인스턴수의 실제 타입을 알아보기 위해 사용된다.

- 조건문에서 사용되며 true, false를 결과값으로 한다.

- 결과값이 참일때 참조변수가 검사한 타입으로 형변환이 가능하다는 것을 뜻한다.


public class InstenceofTest {
 public static void main(String[] args) {
  FireEngine fe = new FireEngine();
 
  if(fe instanceof FireEngine) {
   System.out.println("This is a FireEngine instance.");
  }
  if(fe instanceof Car) {
   System.out.println("This is a Car instance.");
  }
  if(fe instanceof Object) {
   System.out.println("This is a Object instance.");
  }
 }
}


Posted by 청웨일