자바 step3 - Class(객체생성) 상속(2)
member class를 생성하였다.
package test.mypac;
/*
* Member 객체에 회원의 번호, 이름, 주소를 담고 싶다면
* 클래스를 어떻게 설계를 해야 할까?
*
* 저장소(필드)가 3개 필요하다
* 필드의 type 은 int, string, string 이 적당할 것 같음
* 필드에 값은 나중에 new Member() 한 이후에 담을 예정
*
* public 은 공개라는 의미로 public을 사용하지 않으면 다른 패키지에 적용 불가
*/
public class member {
public int num;
public String name;
public String addr;
//메소드
public void showInfo() {
//this 는 객체 자신의 참조값을 가리키는 예약어
System.out.println("번호:"+this.num+" 이름:"+this.name+" 주소:"+this.addr);
}
}
package test.main;
import test.mypac.member;
public class MainClass03 {
public static void main(String[] args) {
System.out.println("main 메소드가 시작되었습니다.");
// Member 객체를 생성해서 그 참조값을 mem1 이라는 지역변수에 담아보세요.(1줄)
member mem1=new member();
mem1.num=1;
mem1.name="김구라";
mem1.addr="노량진";
// Member 객체를 생성해서 그 참조값을 mem2 이라는 지역변수에 담고 해골의 정보도 담아보세요
member mem2=new member();
mem2.num=2;
mem2.name="해골";
mem2.addr="행신동";
// mem1, mem2 에 들어있는 참조값을 이용해서 showInto() 메소드 호출하기
mem1.showInfo();
mem2.showInfo();
}
}
<console>
main 메소드가 시작되었습니다.
번호:1 이름:김구라 주소:노량진
번호:2 이름:해골 주소:행신동
member class를 상속받아서 mem1이라는 변수명으로 새로운 객체를 생성하였다.
member class에 필드에 num, name, addr이 있으므로 상속받아 변수값을 넣어줄 수 있다.
그 참조값을 가지고 메소드를 호출하면 참조값이 적용된 상태로 호출할 수 있다.
MyUtil이라는 객체를 생성하였다.
package test.mypac;
public class MyUtil {
//필드
public static String version="1.0";
//메소드
public static void send() {
System.out.println("전송합니다");
}
}
package test.main;
import test.mypac.MyUtil;
public class MainClass04 {
public static void main(String[] args) {
/*
* MyUtil 클래스에 있는 send() 메소드를 호출하고 싶다면?
*
* static 메소드 이기 때문에 new 하지 않고
*
* import 후에 클래스명에 . 을 찍어서 호출할 수 있다.
*/
//static 메소드 호출
MyUtil.send();
//static 필드 참조
String v=MyUtil.version;
}
}
<console>
전송합니다
MyUtil 객체는 static 메소드를 사용했기때문에 바로 호출할 수 있다. 넣어줄 값이 없기 때문에 새로운 객체를 생성할 필요는 없다. 위의 다른 객체들은 static이 아닌 void를 사용했기 때문에 객체를 생성해야되지만, static으로 class를 만들어 놓으면 새로운 객체를 생성할 필요는 없다.
package test.main;
public class MainClass05 {
public static int num=999;
public static void main(String[] args) {
//static 메소드 안에서는 static 자원들만 사용할 수 있다.
System.out.println("num:"+MainClass05.num);
}
}
<console>
num:999
같은 페이지 이지만 main 메소드 위에 static으로 num이라는 변수를 지정해줬기때문에 같은 페이지에서 .만 찍어 바로 사용할 수 있다.
package test.main;
import java.io.PrintStream;
public class MainClass06 {
public static void main(String[] args) {
/*
* System 클래스의 out 이라는 static 피드에 담긴 참조값을
* PrintStream type 지역 변수에 담기
* 지역변수에 담긴 참조값에 . 찍어서 println() 메소드 호출해서 콘솔창에 문자열 출력하기
*/
PrintStream a=System.out;
a.println("hi~");
}
}
<console>
hi~
보통 console을 호출할 때 System.out.println()를 사용하는데 이것 또한 System 이라는 class이다.
너무 자주 사용하기에 굳이 객체를 생성하지 않아도 사용하도록 하였는데 위와 같은 방식으로도 class를 상속 받아서 객체를 생성하여 사용할 수도 있다.
package test.main;
import java.util.Random;
public class MainClass07 {
public static void main(String[] args) {
// Random type 참조값이 담길 수 있는 ran 이라는 이름의 빈 지역변수 만들기
Random ran=null;
//Random ran=new Random();
// Random 객체를 생성해서 그 참조값을 지역변수 ran 에 대입하기
ran=new Random();
// 참조값에 . 찍어서 nextInt() 메소드를 호출하고 메소드가 리턴해주는 값을 지역변수 ranNum 에 담기
int ranNum=ran.nextInt();
System.out.println(ranNum);
}
}
<console>
1000963584
Random class이다. class 는 무조건 자신이 만드는 것이 아니라 이미 만들어져 있는 내장 class도 매우 많이 존재한다. 그 중에 하나가 Random class이다. 만들지 않아도 ran이라는 변수명에 Random class를 바로 상속받아서 사용할 수 있다.
Random class는 말 그대로 random한 숫자를 구할 때 자주 사용한다.
package test.main;
import java.util.Scanner;
public class MainClass08 {
public static void main(String[] args) {
// Scanner 객체를 생성해서 scan 이라는 지역변수에 참조값을 담기
Scanner scan=new Scanner(System.in);
// 콘솔에 입력한 문자열을 읽어와서 변수에 담기
String line=scan.nextLine();
System.out.println("line:"+line);
}
}
<console>
하이
line:하이
Scanner class 도 내장 class이다. console에 무언가를 입력할 때 사용하는 class이며, 객체를 생성해서 nextLine() 메소드를 사용하면 console창에서 문자열을 입력할 수 있다. 숫자를 입력하려면 nextInt() 메소드를 사용하면 된다.