-
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