Java

자바 step3 - Class(객체생성) 상속(2)

코딩탕탕 2022. 10. 24. 21:54

 

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() 메소드를 사용하면 된다.