ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java (3) - 클래스, 인스턴스
    웹개발/Java 2021. 2. 3. 22:34

     

    * 클래스와 인스턴스: 객체화

    · 클래스 - 설계도, 정의 / 인스턴스 - 제품, 호출

     

    · this.left는 class 안에서 선언한 변수를 가리키고 left는 매개변수를 가리킴

    package org.opentutorials.javatutorials.object;

     

    class Calculator{

    int left, right; //this.left

     

    public void setOprands(int left, int right){ //매개변수 left

    this.left = left;

    this.right = right;

    }

     

    public void sum(){

    System.out.println(this.left+this.right);

    }

     

    public void avg(){

    System.out.println((this.left+this.right)/2);

    }

    }

     

    public class CalculatorDemo4 {

     

    public static void main(String[] args) {

     

    Calculator c1 = new Calculator();

    c1.setOprands(10, 20);

    c1.sum();

    c1.avg();

     

    Calculator c2 = new Calculator(); //객체

    c2.setOprands(20, 40);

    c2.sum();

    c2.avg();

    }

     

    }

     

    * 클래스 멤버, 인스턴스 멤버

    · 객체의 구성원(멤버)은 변수와 메소드

     

    · 인스턴스'의' 변수: left, right

    · 클래스'의' 변수: PI (static double PI=3.14;), 모든 인스턴스가 공유하는 변수,

    static을 멤버 앞에 붙이면 클래스의 멤버가 됨,

    c1.PI 또는 Calculator.PI를 통해 접근 (인스턴스를 통해 PI에 접근 / 클래스를 통해서 PI에 접근)

     

    package org.opentutorials.javatutorials.classninstance;

     

    class Calculator {

    static double PI = 3.14;

    int left, right;

     

    public void setOprands(int left, int right) {

    this.left = left;

    this.right = right;

    }

     

    public void sum() {

    System.out.println(this.left + this.right);

    }

     

    public void avg() {

    System.out.println((this.left + this.right) / 2);

    }

    }

     

    public class CalculatorDemo1 {

     

    public static void main(String[] args) {

     

    Calculator c1 = new Calculator();

    System.out.println(c1.PI);

     

    Calculator c2 = new Calculator();

    System.out.println(c2.PI);

     

    System.out.println(Calculator.PI);

     

    }

     

    }

     

    * 클래스 메소드

    · static을 붙이면 클래스 소속의 메소드가 됨

     

    package org.opentutorials.javatutorials.classninstance;

     

    class Calculator3{

     

    public static void sum(int left, int right){

    System.out.println(left+right);

    }

     

    public static void avg(int left, int right){

    System.out.println((left+right)/2);

    }

    }

     

    public class CalculatorDemo3 {

     

    public static void main(String[] args) {

    Calculator3.sum(10, 20); //클래스에 직접 접근해서 사용 가능 (메모리 절약 가능)

    Calculator3.avg(10, 20);

     

    Calculator3.sum(20, 40);

    Calculator3.avg(20, 40);

    }

     

    }

     

    * 클래스 멤버, 인스턴스 멤버: 타입별 비교

    · 인스턴스 변수=Non-Static Field / 클래스 변수=Static-Field

    1. 인스턴스 메소드는 클래스 멤버에 접근할 수 있다.

    2. 클래스 메소드는 인스턴스 멤버에 접근할 수 없다.

     

    package org.opentutorials.javatutorials.classninstance;

     

    class C1{

    static int static_variable = 1;

    int instance_variable = 2;

    static void static_static(){

    System.out.println(static_variable);

    }

    static void static_instance(){

    // 클래스 메소드에서는 인스턴스 변수에 접근 할 수 없다.

    //System.out.println(instance_variable);

    }

    void instance_static(){

    // 인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다.

    System.out.println(static_variable);

    }

    void instance_instance(){

    System.out.println(instance_variable);

    }

    }

    public class ClassMemberDemo {

    public static void main(String[] args) {

    C1 c = new C1();

    // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공

    // 인스턴스 메소드가 정적 변수에 접근 -> 성공

    c.static_static();

    // 인스턴스를 이용해서 정적 메소드에 접근 -> 성공

    // 정적 메소드가 인스턴스 변수에 접근 -> 실패

    c.static_instance();

    // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공

    // 인스턴스 메소드가 클래스 변수에 접근 -> 성공

    c.instance_static();

    // 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공

    // 인스턴스 메소드가 인스턴스 변수에 접근 -> 성공

    c.instance_instance();

    // 클래스를 이용해서 클래스 메소드에 접근 -> 성공

    // 클래스 메소드가 클래스 변수에 접근 -> 성공

    C1.static_static();

    // 클래스를 이용해서 클래스 메소드에 접근 -> 성공

    // 클래스 메소드가 인스턴스 변수에 접근 -> 실패

    C1.static_instance();

    // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패

    //C1.instance_static();

    // 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패

    //C1.instance_instance();

    }

     

    }

     

     

     

    '웹개발 > Java' 카테고리의 다른 글

    Java (5) - 상속  (0) 2021.02.05
    Java (4) - 생성자  (0) 2021.02.05
    Java (2) - 배열  (0) 2021.02.01
    Java (1) - 설치와 실행  (0) 2021.02.01

    댓글

Designed by Tistory.