본문 바로가기

JAVA

231214 Java 객체지향

클래스 안에 새로운 메소드 만들어서 호출하기

public class HelloWorld {
    public static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld();
        for (int i = 0; i < 10; i++) {
            helloWorld.hello();
        }
    }
    public void hello(){
        System.out.println("Hello ~");
    }
}

 

신규 클래스 선언 및 클래스 내부 설정

class Cat {
    // 클래스 안에 필요한 3가지
    // 속성 : 변수
    String name; // 초기화를 하지 않음
    int aggressive = 50;

    // 생성자 : 인스턴스를 생성할 때 사용하는 메소드
    public Cat(String name) {
        this.name = name;
    }

    // 기능 : 메소드
    public void stroke(int count) {
        if (aggressive > 60) {
            System.out.println("공격력이 : " + aggressive + " 입니다.");
            System.out.println("당신의 손을 할큅니다.");
        } else {
            System.out.println(count + " 회 만졌습니다.");
            System.out.println("공격력이 1 올라갑니다.");
            System.out.println("공격력 : " + aggressive++);
        }
    }
    public void sleep() {
        System.out.println(name + " (이)가 잠을 잡니다.");
    }
    public int add(int num1, int num2) {
        return num1 + num2;
    }
}

public class CM01 {
    public static void main(String[] args) {
        Cat cat1 = new Cat("헤롱이");
        Cat cat2 = new Cat("메롱이");
        Cat cat3 = new Cat("야옹이");
        Cat[] cats = new Cat[3];
        cats[0] = cat1;
        cats[1] = cat2;
        cats[2] = cat3;
        for (Cat c : cats) {
            c.sleep();
        }
        for (int i = 0; i < cats.length; i++) {
            cats[i].sleep();
        }
        for (int i = 0; i < 15; i++) {
            cat1.stroke(1);
        }
        int result = cat3.add(10,20); // add 메소드 호출하여 리턴값을 받음
        System.out.println(result);
    }
}

 

프로그래밍의 유명한 격언 - 바퀴를 다시 발명하지 마라

 

클래스 안에 생성자 여러 개 만들기

class Human { // 클래스는 절대 겹치지 않게, 메소드나 클래스 내부에 생성 X
    // 속성 = 변수
    String name;
    int age;
    String address;

    // 생성자
    public Human(String name, int age) { // 생성자는 리턴 타입이 없음
        this.name = name; // 입력받은 name 을 변수 name 에 집어넣음
        this.age = age;
    }

    public Human(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
}

public class Oop2 {
    public static void main(String[] args) {
        Human h1 = new Human("이름", 1);
        System.out.println(h1); // dec14.oop.Human@1e643faf
        System.out.println(h1.name); // 이름
        System.out.println(h1.age); // 1
        Human h2 = new Human("홍길동", 5, "고양시");
        System.out.println(h2.name); // 홍길동
        System.out.println(h2.age); // 5
        System.out.println(h2.address); // 고양시
        Human h3 = new Human(null, 0, null); // 변수 별 초기값으로 넣어도 생성 가능-
    }
}

 

정보처리기사 출제 문제

class Conv {
    int a; // 필드

    public Conv(int a) { // 생성자
        this.a = a;
    }

    int func() { // 메소드
        int b = 1;
        for (int i = 1; i < a; i++) {
            b = a * i + b; // i = 1 : 6, i = 2 : 16, i = 3 : 31, i = 4 : 51
        }
        return a + b; // 5 + 51
    }
}

public class Test01 {
    public static void main(String[] args) {
        Conv conv = new Conv(3); // Conv 클래스 conv 객체 생성
        conv.a = 5; // conv 의 a 값을 5 로 수정
        int b = conv.func(); // 56
        System.out.println(conv.a + b); // 5 + 56 = 61
    }
}

 

정보처리기사 기출

class A {
    int a;
    int b;
}

public class Test02 {
    static void func1(A m) {
       m.a *= 10;
    }
    static void func2(A m) {
       m.a += m.b;
    }

    public static void main(String[] args) {
       A m = new A(); // 객체 생성 시 입력 값 없음

       m.a = 100; // a 값을 100 으로 수정
       func1(m); // func1 연산 수행, m.a = m.a * 10; -> 1000
       m.b = m.a; // m.b 에 1000 대입
       func2(m); // func2 연산 수행, m.a = 1000 + 1000; -> 2000

       System.out.printf("%d", m.a); // 2000
    }
}

 

public 이 붙은 다른 클래스를 이용하여 객체 생성하기

 

기존 다른 클래스 파일을 생성하여 만들어 둔 클래스

package dec14.oop;

public class Oop03 {
    int num = 10;
    public String toString() {
        String text = "저는 dec14.opp 에 있는 Oop03 입니다.";
        return text;
    }
}

 

위 명령을 이용하여 만든 다른 객체

package dec14;

import dec14.oop.Oop03; // public 이 붙으면 패키지와 상관없이 사용 가능

public class Oop1 {
    public static void main(String[] args) {
        Human h1 = new Human("홍길동", 1);
        Cat cat = new Cat("야옹이");
        int result = cat.add(10,20);
        System.out.println(result); // 30

        Oop03 oop03 = new Oop03();
        String s = oop03.toString();

        System.out.println(s); // 저는 dec14.opp 에 있는 Oop03 입니다.
    }
}

 

'JAVA' 카테고리의 다른 글

231218 Java  (0) 2023.12.18
231215 Java 객체지향  (0) 2023.12.15
231213 Java  (0) 2023.12.13
231212 Java  (0) 2023.12.12
231211 Java  (2) 2023.12.11