본문으로 바로가기

클래스 이용

category 프로그래밍/java 2017. 8. 30. 18:32

클래스 라이브러리란?


컴퓨터에서 자주 사용되는 함수들을 프로그램상에 모아놓은것이다.
jar파일에 언제 든지 자유롭게 사용될 수 있도록 되어 있다.

우리가 모르는 단어가 있다면 사전을 찾든, 구글링을 하듯이 

java에서도 모르는 클래스가 있다면 라이브러리를 검색하도록 되어있다. 

즉, 클래스안에 라이브러리가 있고 자주 사용되는 것을 정리한 것이다라고 보면 된다.

클래스 변수 및 여러 메소드가 들어 있다.



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Ex03 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("당신은 몇 살 입니까?");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

int num = Integer.parseInt(str);

System.out.println( num +"입니다..");

}


}




위에 코드에서는 보면 예를들어서
br ----------------------> BufferedReader 클래스 변수

str ----------------------> String 클래스 변수


또한 다음과 같은 메소드를 호출해서 클래스의 기능을 사용했다.

br.readLine()--------------> BufferedReader 클래스의 인스턴스 메소드 호출

Integer.parseInt() -----------> Integer 클래스의 클래스 메소드를 호출


이런 클래스가 있기 때문에 선언을 하지 않음에도 클래스의 기능을 이용하여 편리하다.



문자열 처리 클래스

1, String 클래스는 문자열(string)의 개념을 클래스로 구현

String 클래스는 여러 메소드가 있는데 그 중에서 char charAt()과 length()메소드를 호출 해보겠다.


public class Sample1 {


public static void main(String[] args) {

// TODO Auto-generated method stub

String str = "Hello" ;

char ch1 = str.charAt(0);

char ch2 = str.charAt(1);

int len = str.length();

System.out.println(str +"의 첫번째 문자는 "+ ch1 +"입니다.");

System.out.println(str +"의 두번째 문자는 "+ ch2 +"입니다.");

System.out.println(str +"길이는"+len +"입니다.");

}


}



 실행화면

Hello의 첫 번째 문자는 H입니다.

Hello의 두 번째 문자는 e입니다.

Hello의길이는 5입니다.


CharAt()메소드는 지정한 위치에 있는 문자를 반환 

만약첫번째라면 0이라는 인수를 사용, 두번째라면 1디된다.


또한 length()메소드는 문자열의 길이를 반환하는 메소드이다.



문자열 객체를 생성할 때의 주의점

String의 객체는 배열처럼 new를 사용하여 만들 수 있다. 그러나 new 대신에 문자열을 ""로 둘러싼 문자열을 가리켜 문자열리터럴이라고 한다.


String str = new String("Hello");


이거 보다는


String str = "Hello";


대문자와 소문자 변환하기

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample2 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("영문자를 입력하십시오.");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

String stru = str.toUpperCase();  ----> 문자열을 대문자로 변한다.

String str1 = str.toLowerCase();  ----> 문자열을 소문자로 변한다.

System.out.println("대문자로 변환하면" + stru + "입니다." );

System.out.println("소문자로 변환하면" + str1 + "입니다.");

}


}


출력결과

영문자를 입력하십시오.

Hello

대문자로 변환하면HELLO입니다.

소문자로 변환하면hello입니다.



문자열 검색하기 indexOf()메소드를 사용


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample3 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("문자열을 입력하십시오.");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();

System.out.println("안녕하십니까. 검색어를 입력하십시오");

String str2 = br.readLine();

char ch = str2.charAt(0);

int num = str1.indexOf(ch);

if(num != -1)

{

System.out.println(str1 +"의" +(num+1) + "번째에서"+ch+"를 발견했습니다.");

}

else

System.out.println(str1 +"에서" +ch + "를 찾을수 없었습니다.");

}


}


출력결과


문자열을 입력하십시오.

안녕하세요

안녕하십니까. 검색어를 입력하십시오

안녕하세요의3번째에서하를 발견했습니다.



문자열 추가하기 (StringBuffer클래스를 사용한다.)



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample3 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("문자열을 입력하십시오.");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();  --->   1번째 문자열

System.out.println("추가할 문자열을 입력하십시오");

String str2 = br.readLine(); --->   2번째 문자열

StringBuffer sb = new StringBuffer(str1);  stringbuffer 객체 생성

sb.append(str2); 문자열 추가

System.out.println(str1 +"에" + str2+ "를 추가하면" + sb + "입니다");

}


}


실행결과


문자열을 입력하십시오.

안녕하세요

추가할 문자열을 입력하십시오

안녕히가세요

안녕하세요에안녕히가세요를 추가하면안녕하세요안녕히가세요입니다



기타 클래스


Integer 클래스 이용하기

Integer클래스는 int형을 위해 다양한 기능을 하는 클래스이다.

기본형을 다루는 클래스는 래퍼 클래스(wrapper)라고 불리는데 이는 무언가를 감싼다는 뜻이다.


래퍼 클리스


 래퍼 클래스

기본형 

 Byte

byte 

 Character

char 

Short 

short 

 Integer

int 

Long 

long 

 Float

float 

 Double

double 



...
String str = br.readLine();

int num = Integer.parseInt(str);  전달된 문자열을 정수로 변환하는 메소드

System.out.println(num +"가 입력되었습니다.");
...



그외에도 Math 클래스가 있는데 max() 메소드 사용예제를 보겠다.


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Sample3 {


public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

System.out.println("정수를 2개 입력하십시오.");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String str1 = br.readLine();

String str2 = br.readLine();

int num1 = Integer.parseInt(str1);

int num2 = Integer.parseInt(str2);

int ans = Math.max(num1, num2);

System.out.println(num1 +"과" + num2+ "중 큰 쪽은" + ans + "입니다");

}


}


실행결과

정수를 2개 입력하십시오.

5

10

5과10중 큰 쪽은10입니다




max()메소드는 인수로 전달된 두 숫자의 값 중 큰 값을 반환한다. 이 예제에서는 int형 인수를 2개 받는 max()메소드를 호출한다.



클래스형 변수

클래스 형 변수에 대입하기'

class Car

{

private int num;

private double gas;

public Car()

{

num = 0;

gas = 0.0;

System.out.println("자동차가 만들었습니다.");

}

public void setCar(int n, double g)

{

num = n;

gas = g;

System.out.println("차량번호를" + num +"으로, 연료 양을"+ gas +"로 바꾸었습니다.");

}

public void show()

{

System.out.println("차량 번호는" + num + "입니다.");

System.out.println("연료 양는" + gas+"입니다.");

}

}

public class Sample6 {


public static void main(String[] args) {

// TODO Auto-generated method stub

Car car1; 클래스 형변수(Car car1변수) 선언

System.out.println("car1을 선언했습니다.");

car1 = new Car();

car1.setCar(1234, 20.5);


Car car2;

System.out.println("car2을 선언했습니다.");

car2 = car1;

System.out.println("car2에 car1을 대입했습니다.");

System.out.println("car1이 가리키는");

car1.show();

System.out.println("car2이 가리키는");

car2.show();

}


}


 

객체를 변경하기

 

 

class Car
{
 private int num;
 private double gas;
 
 
 
 public Car()
 {
  num = 0;
  gas = 0.0;
  System.out.println("자동차가 만들었습니다.");
  
 }
 public void setCar(int n, double g)
 {
  num = n;
  gas = g;
  System.out.println("차량번호를" + num +"으로, 연료 양을"+ gas +"로 바꾸었습니다.");
 }
 public void show()
 {
  System.out.println("차량 번호는" + num + "입니다.");
  System.out.println("연료 양는" + gas+"입니다.");
 }
}
public class Sample7 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
 Car car1;
 System.out.println("car1을 선언했습니다.");
 car1 = new Car();
 car1.setCar(1234, 20.5);

 Car car2;
 System.out.println("car2을 선언했습니다.");
 
 car2 = car1;
 System.out.println("car2에 car1을 대입했습니다.");
 
 System.out.println("car1이 가리키는");
 car1.show();
 System.out.println("car2이 가리키는");
 car2.show();
 
 System.out.println("car1dl 가리키는 차량을 변경합니다.");
 car1.setCar(2345, 30.5);   car1을 사용하여 객체를 변경했다.
 
 System.out.println("car1이 가리키는");
 car1.show();
 System.out.println("car2이 가리키는");
 car2.show();
 
 }

실행결과

 

car1을 선언했습니다.
자동차가 만들었습니다.
차량번호를1234으로, 연료 양을20.5로 바꾸었습니다.
car2을 선언했습니다.
car2에 car1을 대입했습니다.
car1이 가리키는
차량 번호는1234입니다.
연료 양는20.5입니다.
car2이 가리키는
차량 번호는1234입니다.
연료 양는20.5입니다.
car1dl 가리키는 차량을 변경합니다.
차량번호를2345으로, 연료 양을30.5로 바꾸었습니다.
car1이 가리키는
차량 번호는2345입니다.
연료 양는30.5입니다.

car2이 가리키는
차량 번호는2345입니다.
연료 양는30.5입니다.

 

null 원리 이해하기

 

class Sample

 

{

public static void main(String[] args

{

 

     Car car1;

car1 = new Car();

 

car1 = null; null을 대입했습니다.

null값을 대입하게 되면 변수 car1은 어떠한 객체도 가리킬수 없는 상태가 됩니다.

이 매커니즘을 garbage collection이라고 합니다.

}

 

}

 

그러나 두개의 변수가 같은 객체를 가리킬 경우 한쪽 변수에 null을 대입한다고 해서 객체가 소멸되지는 않는다.

 

class Sample

 

{

public static void main(String[] args

{

 

     Car car1;

car1 = new Car();

 

Car car2;

car2 = car1; Car1과 car2는 같은 객체를 가리킨다.

 

car1 = null;  car1에 null을 대입했다. 그러나 여전히 car2는 객체를 가리키고 있다.

 

 

.

}

 

}


 

 

 

메소드의 인수로서 사용하기

class Car
{
 private int num;      기본형 변수
 private double gas;
 private String name;클래스형 변수
 
 
 public Car()
 {
  num = 0;
  gas = 0.0;
  name = "무덤";
  System.out.println("자동차가 만들었습니다.");
  
 }
 public void setCar(int n, double g)
 {
  num = n;
  gas = g;
  System.out.println("차량번호를" + num +"으로, 연료 양을"+ gas +"로 바꾸었습니다.");
 }
 public void setName(String nm) : 클래스 형의 변수를 가인수로 받는 메소드
 {
  name = nm;
  System.out.println("차량번호를" + name +"로 바꾸었습니다.");
 }
 public void show()
 {
  System.out.println("차량 번호는" + num + "입니다.");
  System.out.println("연료 양는" + gas+"입니다.");
  System.out.println("이름은" + name + "입니다.");
 }
}
public class Sample8 {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
 Car car1;
 System.out.println("car1을 선언했습니다.");
 car1 = new Car();
 
 car1.show();
 int number = 1234;
 
 double gasoline = 20.5;
 String str = "1호차";  문자열 객체 생성

 car1.setCar(number, gasoline);
 car1.setName(str); 문자열 객체를 가리키는 변수를 실인수로 지정한다.
 
 car1.show();
 
 }

}

실행결과

 

 

car1을 선언했습니다.
자동차가 만들었습니다.
차량 번호는0입니다.
연료 양는0.0입니다.
이름은무덤입니다.
차량번호를1234으로, 연료 양을20.5로 바꾸었습니다.
차량번호를1호차로 바꾸었습니다.  메소드 안에서 문자열 객체가 처리되고 있다.
차량 번호는1234입니다.
연료 양는20.5입니다.
이름은1호차입니다.

 

 

 

값전달, 참조 전달

 

class Car

 

}

public void setName(Name nm)

name =nm;

}    

 

 

public class Sample8 {

 public static void main(String[] args) {
    


 Name Str = new Name("1호차");  문자열 객체 생성


 car1.setName(str); 문자열 객체를 가리키는 변수를 실인수로 지정한다

 

호출한 곳에서 가리키는 객체와 호출된 곳에서 가리키는 객체는 같다(참조전달)

클래스 형변수에 대입하면 대입된 변수는 대입 한 변수와 같은 객체를 가리키기 때문이다.

 

class Car

 

}

public void setCar(int n, double g)

{

 

}

 

 

public class Sample8 {

{

public static void main(String[] args)

{

 int number = 1234;
 
 double gasoline = 20.5;

 car1.setCar(number, gasoline);
  car1.show();

}

}

 

호출한 곳에서 가리키는 객체와 호출된 곳에서 가리키는 객체는 다르다.

실제 number변수의 1234fmf setCar메소드에 int형 n인수로 을 전달하는 것이다.