'C/Java'에 해당되는 글 59건

  1. 2007.11.06 랩퍼 클래스(Wrapper class) by 청웨일
  2. 2007.11.06 예외처리(Try~) by 청웨일
  3. 2007.11.06 CarTest by 청웨일
  4. 2007.11.06 자바의 제귀 by 청웨일
  5. 2007.11.06 인터페이스 by 청웨일

기본형(int, boolean, float, double)을 위해 자바클래스 라이브러리가 제공하는 클래스

랩퍼 클래스에 특정한 값을 대입해도 변경되지 않는다.


랩퍼 클래스에 포함 된 값을 수장하는 방법

- 값을 구한다.

- 값을 수정한다.

- 수정된 값을 사용해서 새로운 랩퍼 클래스를 생성한다.


랩퍼 클래스의 메서드 패턴

- xxxValue : 관련된 기본형 반환

- getxxx : 매개변수로 전달된 String값을 관련된 기본형으로 변환

- valueOf : 랩퍼 클래스의 인스턴스를 String값으로 변환


모든 랩퍼 클래스는 두개의 생성자를 제공한다.

- 관련된 기본형으로부터 클래스의 인스턴스를 만들기 위한 생성자

- 관련있는 기본형으로 변환될 문자열을 사용해 클래스의 인스턴스를 생성하기 위한 생성자


1) Boolean 클래스

생성자

- Boolean(boolean value) : value 매개변수를 Boolean 객체에 할당한다.

- Boolean(String s) : String 매개변수가 null이 아니거나 equal이면

                            true를 Boolean객체에 할당, 아니면 무시


2) Byte 클래스

생성자

- Byte(byte value) : 지정된 byte 값으로 Byte 객체를 초기화한다.

- Byte(String s) : String 매개변수로 지정된 값으로 Byte 객체를 초기화한다.


*10진수 값을 포함하는 byte 또는 String을 이용해 Byte랩퍼 클래스의 인스턴스를 생성할 수 있다.

*byte자료형은 다양한 방법으로 해석될 수 있기 때문에 Boolean보다 정교하다.

*byte값을 short, int, long, double로 변환하는 메서드를 제공한다.

*문자열 값이 어떤 진법으로 만들어진것인지 알면 String을 byte로 변환하는 기능도 가능.

*두개의 byte를 비교하는 메서드도 제공


3) Character 클래스

생성자

- Character(char value) : 매개변수 value를 사용해 Character객체를 생성한다.


*한 개의 문자만을 표현하기 때문에 문자열을 이용한 생성자가 필요하지 않다.

*문자는 유니코드로 표현하기 때문에 작업하기 어렵다.

*문자를 조작하는 메소드뿐만 아니라 문자의 자료형과 값을 테스트하기 위한 메소드를 제공한다.


4) Double 클래스

생성자

- Double(double value) : double 자료형 매개변수를 사용해 새롭게 Double 객체를 생성

- Double(String s) : String으로 표현된 double자료형의 값을 사용해 Double 객체를 생성


*Double을 다른 기본형으로 변환하고 비트구조를 수정하기 위한 메소드를 제공한다.

*Double 클래스에서 자료형을 변환하는 메소드를 사용할때 캐스팅 된다.

ㄴ넓은 자료형에서 좁은 자료형으로 변환될때 데이터를 잃을 수 있다.


5) Float 클래스

생성자

- Float(double value) : double을 float로 변환한 값을 이용하여 Float 객체를 생성

- Float(float value) : float 매개변수를 할당한 Float 객체를 생성

- Float(String s) : String으로 표현된 float형 실수를 사용해 Float객체를 생성


*float를 문자열로 변환하는 메소드뿐만 아니라 다른 기본 자료형으로 변환하는 메소드를 제공한다.


6) Integer 클래스

생성자

- Integer(int value) : int형 value를 이용하여 Integer객체를 생성

- Integer(String s) : String으로 표현된 값을 사용해 Integer객체를 생성


*[intString]로 변환하는 메소드뿐만 아니라 다른 기본 자료형으로 변환하는 메소드를 제공한다.

*10진수를 다른진수로 변환하는 진수변환 메소드를 제공한다.


7) Long 클래스

생성자

- Long(long value) : long형 value를 사용하여 Long객체를 생성

- Long(String s) : String에 의해 표현된 long형 정수를 할당한 Long 객체를 생성


*Integer클래스와 유사하다

*[longString]로 변환하는 메소드뿐만 아니라 다른 기본 자료형으로 변환하는 메소드를 제공한다.

*10진수를 다른 진수로 변환하는 진수변환 메소드를 제공한다.


8) Short 클래스

생성자

- Short(short value) : short형 value를 이용하여 Short 객체를 생성

- Short(String s) : String에 의해 표현된 short형 실수를 할당한 Integer객체를 생성


*short값을 사용한다는 것만 제외하면 Integer/Long클래스와 동일하다.


Posted by 청웨일

예외처리(Try~)

C/Java : 2007. 11. 6. 14:27

- 에러로 인해 프로그램이 비정상 종료되지 않도록 처리한다.


Eexception : 에러 상태, 메소드의 기대되지 않은 결과가 발생

Throwing an Exception : 예외적인 상태를 발견하고 예외를 발생시킨다.

Catching an Exception : 예외가 발생했을때 예외 핸들러에 의해 catch할수 있다.

Handling an Exception : 예외 처리


1) try 블록 - 예외가 발생할수 있는 문장을 try키워드로 둘러싼 구조.

2) catch 블록 - 발생한 예외는 catch 블록 내로 걸려든다.

                  - try블록은 0개 이상의 catch블록이 뒤따른다.(없으면 finally블록)

3)finally 블록 - catch블록 뒤에, 없으면 try블록 뒤에 온다.


*

try {

//예외가 발생할수 있는 문장들

}

catch(...) {

//try블록에서 발생할수 있는 예외 처리

}

finally {

//해제 작업

}

Posted by 청웨일

CarTest

C/Java : 2007. 11. 6. 14:26

//CarTest.java


public class CarTest {
 static final int COUPE = 1;
 static final int CONVERTIBLE = 2;
 static final int T_TOP = 3;
 
 static final int V4 = 1;
 static final int V6 = 2;
 static final int V8 = 3;
 static final int V10 = 4;
 
 static int engineType;
 static int bodyType;
 static int topSpeed;
 static int gas;
 static int oil;
 static boolean isRunning;
 static int currentSpeed;
 
 public static void turnOn() {
  isRunning = true;
 }
 
 public static void turnOff() {
  isRunning = false;
 }
 
 public static void accelerate() {
  switch(engineType) {
  case V4:
   speedUp(2);
   break;
  case V6:
   speedUp(3);
   break;
  case V8:
   speedUp(4);
   break;
  case V10:
   speedUp(5);
   break;
  }
 }
 
 public static void speedUp(int amount) {
  if(isRunning == false) {     //자동차가 멈춰있으면 아무것도 하지 않고 리턴
   return;
  }
 
  if((currentSpeed + amount) >= topSpeed) {
   currentSpeed = topSpeed;
  }
 
  else {
   currentSpeed += amount;
  }
 }
 
 public static void decelerate() {
  if(isRunning == false) {      //자동차가 멈춰있으면 아무것도 하지 않고 리턴
   return;
  }
  if((currentSpeed - 5) <= 0) {
   currentSpeed = 0;
  }
  else {
   currentSpeed -= 5;
  }
 }
 
 public static void main(String[] args) {
  engineType = V10;
  bodyType = CONVERTIBLE;
  topSpeed = 185;
  isRunning = false;
  currentSpeed = 0;     //자동차의 속성
 
  turnOn();    //자동차를 출발시킨다.
  for(int i=0; i<10; i++) {
   accelerate();
   System.out.println("Current Speed a: " + currentSpeed);
  }
  for(int i=0; i<5; i++) {
   decelerate();
   System.out.println("Current Speed d: " + currentSpeed);
  }
  turnOff();
 }
}



======================================================

 

여러대의 자동차를 표현하고자 할때

자동차의 속성을 따로 클래스로 빼내 정의할수 있다.


//Car.java


public class Car {
 static final int COUPE = 1;
 static final int CONVERTIBLE = 2;
 static final int T_TOP = 3;
 
 static final int V4 = 1;
 static final int V6 = 2;
 static final int V8 = 3;
 static final int V10 = 4;
 
 static int engineType;
 static int bodyType;
 static int topSpeed;
 static int gas;
 static int oil;
 static boolean isRunning;
 static int currentSpeed;
}


//CarTest2.java


public class CarTest2 {


 public static void turnOn(Car c) {
  c.isRunning = true;
 }
 
 public static void turnOff(Car c) {
  c.isRunning = false;
 }
 
 public static void accelerate(Car c) {
  switch(c.engineType) {
  case Car.V4:
   speedUp(c, 2);
   break;
  case Car.V6:
   speedUp(c, 3);
   break;
  case Car.V8:
   speedUp(c, 4);
   break;
  case Car.V10:
   speedUp(c, 5);
   break;
  }
 }
 
 public static void speedUp(Car c, int amount) {
  if(c.isRunning == false) {
   return;
  }
 
  if((c.currentSpeed + amount) >= c.topSpeed) {
   c.currentSpeed = c.topSpeed;
  }
 
  else {
   c.currentSpeed += amount;
  }
 }
 
 public static void decelerate(Car c) {
  if(c.isRunning == false) {
   return;
  }
  if((c.currentSpeed - 5) <= 0) {
   c.currentSpeed = 0;
  }
  else {
   c.currentSpeed -= 5;
  }
 }
 
 public static void main(String[] args) {
  Car c1 = new Car();           //자동차의 속성을 정의한다. 객체를 생성한다.
  c1.engineType = Car.V10;
  c1.bodyType = Car.CONVERTIBLE;
  c1.topSpeed = 185;
  c1.isRunning = false;
  c1.currentSpeed = 0;
 
  turnOn(c1);
  for(int i=0; i<10; i++) {
   accelerate(c1);
   System.out.println("Current Speed a: " + c1.currentSpeed);
  }
  for(int i=0; i<5; i++) {
   decelerate(c1);
   System.out.println("Current Speed d: " + c1.currentSpeed);
  }
  turnOff(c1);
 }
}


Posted by 청웨일

자바의 제귀

C/Java : 2007. 11. 6. 14:24
public class FactorialRecursive {
 public static int factorial(int n) {
  if(n == 1) return 1;            //n이 1이 되면 1을 반환한다.
  return n*factorial(n-1);     //아니면 (n-1)로 재귀
 }
 
 public static void main(String[] args) {
  System.out.println("5 factorial = " + factorial(5));
 }
}
Posted by 청웨일

인터페이스

C/Java : 2007. 11. 6. 14:24

인터페이스 정의


 [public] interface iname [extends i2name]

- public을 포함할수 있지만 생략

- abstract를 포함할수 있지만 생략

- 필드에 static과 final을 포함할수 있지만 생략

- 모든 인터페이스는 public과 abstract이다.

- 정의할수 있는 인터페이스의 속성은 static과 final


인터페이스 키워드 implements


[public] [qualefiers] class classname implements iname ( , i2name, ...)

- 클래스는 여러개의 인터페이스를 구현할 수 있다.

- 클래스는 avstract 또는 final일 수 있다.

- 클래스는 한개의 클래스 확장과 여러 개의 인터페이스를 구현할수 있다.


인터페이스와 추상 클래스

- 해당 기능이 객체에 매우 잘 결합되어 있을때는 추상 메서드

- 해당 기능이 객체에 보조적인 경우 인터페이스

- 해당 기능이 다른 객체에 광범위하게 적용가능하면 인터페이스




매개변수를 통해 동적으로 제공


class A {
 void autoPlay(I i) {
  i.play();
 }
}

interface I {
 public abstract void play();
}

class B implements I {
 public void play() {
  System.out.println("play in B class");
 }
}

class C implements I {
 public void play() {
  System.out.println("play in C class");
 }
}

public class InterfaceTest {
 public static void main(String[] args) {
  A a = new A();
  a.autoPlay(new B());
  a.autoPlay(new C());
 }
}



제 3의 클래스를 통해 제공


public class InterfaceTest {
 public static void main(String[] args) {
  A a = new A();
  a.methodA();
 }
}

class A {
 void methodA() {
  I i = InstanceManager.getInstance();  //제 3의 클래스 메서드를 통해 인터페이스 I를
  i.methodB();                                   // 구현한 클래스의 인스턴스를 얻어온다.
 }
}

interface I {
 public abstract void methodB();
}

class B implements I {
 public void methodB() {
  System.out.println("methodB in B class");
 }
}

class InstanceManager {
 public static I getInstance() {
  return new B();
 }
}

Posted by 청웨일