[ 여러개의 클래스 생성 ]
package jun14;
// 사람을 만들어 보겠습니다.
class Human{
// 필드
String name; // 인스턴스 변수_ 선언만 하면 사용가능
byte age;
String addr;
String ssn;
// 메소드 : 되돌려주는 타입, void는 되돌려주는 값이 없을때.
public double what() {
return 3;
}
public boolean eat() {
return 1+1 == 3;
}
public int sleep() { // 메서드 타입이 int면 return값도 int로 맞춰줘야함!
return 1;
}
public void work() {
System.out.println(name + "Zzzzzz"); // name : 인스턴스 변수_ 선언만 하면 사용가능
String ng = "홍길동";
name = ng;
// String name1; // name1 : 지역변수 _ 사용불가(초기화필요)
System.out.println(name);
}
}
public class CM01 {
public static void main(String[] args) {
int num1 = 10; // 지역변수
System.out.println(num1); // 10
Human human = new Human();
human.eat(); // 인스턴스.메소드명()
System.out.println(human.eat()); // false
human.toString(); // * Object에 있습니다. 최상위 타입입니다.
int sleep = human.sleep();
System.out.println(sleep); // 1
}
}
* Object : 최상위타입 (클래스의 상위타입)
human. 자동완성에서 상위타입인 Human / object 표시해줌
아래처럼 출력시켜보면 아래와 같은 결과가 나온다.
System.out.println( human.toString(); )
************************
jun14.Human@6f2b958e
toString() 의 정의를 살펴보면 리턴값이 아래와 같다.
클래스 이름 + 해시코드
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
* 해시코드 : 객체를 식별하는 데 사용되는 정수 값
만약 Human 클래스에 명시적으로 hashCode() 메소드를 오버라이드하지 않았다면, Object 클래스의 기본 hashCode() 구현이 호출된다. 이 기본 구현은 객체의 내부 메모리 주소를 기반으로 한 해시 코드를 생성.
인스턴스의 위치 주소
package jun14;
class Human{
String name;
byte age;
String addr;
String ssn;
public double what() {
return 3;
}
public boolean eat() {
return 1+1 == 3;
}
public int sleep() {
return 1;
}
public void work() {
System.out.println(name + "Zzzzzz");
String ng = "홍길동";
name = ng;
System.out.println(name);
}
}
public class CM01 {
public static void main(String[] args) {
Human human = new Human();
human.work(); // Human클래스의 work메서드 실행
System.out.println(human.name); // work메서드가 실행되지 않으면 결과값은 null
// System.out.println(human.work()); // 반환타입이 void라 실행되지 않음
System.out.println(human.sleep()); // 반환타입이 int라 1 출력
}
}
nullZzzzzz // 여기에서 name은 인스턴스 변수(선언만하고 초기화x)
홍길동
홍길동
1
[ 클래스 참조_ 같은 패키지]
package jun14;
class Apple{
String color;
int age;
public void info() {
System.out.println("색상 : " + color);
System.out.println("나이 : " + age);
}
}
public class String03 {
public static void main(String[] args) {
Apple apple = new Apple();
Apple apple2 = new Apple();
}
}
package jun14;
class Human{
public double what() {
return 3;
}
....
public void work() {
System.out.println(name + "Zzzzzz");
String ng = "홍길동";
name = ng;
System.out.println(name);
String name;
byte age;
String addr;
String ssn; // 인스턴스 변수 선언 위치는 상관없음. 클래스 내부에만 써주면됨.
// 보기좋게 상단에 써줄뿐..
}
}
public class CM01 {
public static void main(String[] args) {
Human human = new Human();
....
Apple a1 = new Apple(); // 다른 파일에 있는 Apple 클래스 인스턴스화 가능.
System.out.println(a1.age); // 0 => int age로 선언만 해서 초기값인 0이 출력.
// 같은 package(jun14)에 있으면 가능.
}
}
** 정리 **
package jun14 -> Public class CM01, class Human
-> Public class String03, class Apple
package apple -> Public class CM02
[ 클래스 참조_ 다른 패키지] _ public에 따라 import 여부 달라짐
package apple;
import jun14.CM01;
import jun14.String03; // // 관련성 있는 클래스끼리 모아두기
public class CM02 {
public static void main(String[] args) {
// Apple apple = new Apple(); // 다른package - 불가능
CM01 cm01 = new CM01(); // 다른package, 근데 public - 가능
// 상단에 해당 package import!
// Human human = new Human();
String03 str03 = new String03();
}
}
* CM01, String03 에서 ctrl + space 하면 해당 패키지에서 가져올 수 있음.
* java.util도 다른 패키지에서 import 해서 가져오는거!!
[ 여러개의 메서드 생성 ]
public class Calc
> plus 메서드 -> 연산
> public main 메서드 -> (plus메서드)실행
package calc;
public class Calc {
// 필드
// 생성자
// 메소드
int plus(int num1, int num2) { // 같은타입은 콤마로 계속 나열가능
System.out.println("출력문 : 계산을 시작합니다.");
return num1 + num2; // 매개변수 두개(num1&num2)를 넣어서 하나의 값을 반환.
}
public static void main(String[] args) {
Calc calc = new Calc(); // 자기 자신을 객체로 만들기
int result = calc.plus(15, 20);
System.out.println(result); // 15 + 20
String name = "가나다라마";
int result2 = calc.plus(15, name.length());
System.out.println(result2); // 15 + 5 = 20
}
}
** return은 하나의 값만 반환가능. 여러개의 값은 배열형태로 반환가능.
출력문 : 계산을 시작합니다.
35
출력문 : 계산을 시작합니다.
20
'국비과정 > JAVA' 카테고리의 다른 글
20230615 _[10일차]_04. Arguments & 메소드 특징 & 활용 (0) | 2023.06.18 |
---|---|
20230615 _[10일차]_03. 객체 지향 특징 & 활용 (0) | 2023.06.18 |
20230615 _[10일차]_02. 객체 생성 연습 (인스턴스) (0) | 2023.06.17 |
20230615 _[10일차]_01. 객체타입 및 참조 (0) | 2023.06.15 |
20230614 _[9일차]_04. 로또번호추첨_(여러개의 클래스) (0) | 2023.06.15 |