프로그래밍/Java 공부

객체지향, 객체 , 인스턴스

개발계발게발 2021. 6. 1. 16:27
반응형

객체지향

 

package jun01;
//객체지향

public class OOP01 {
	int number = 90;
	// 3 변수 선언 = 인스턴스 변수 == 멤버변수, 멤버 필드
	//				클래스 바디에 생성
	//				초기화하지 않아도 자바가 알아서 해줌
	//				클래스에서 사용하기 위해서 생성

public static void main(String[] args) {
		//3		Code : 변수 선언문 = 인스턴스 변수
		int app = 0;
		System.out.println(app);	//0
		
		OOP01 oop01 = new OOP01();
		oop01.print2();// 점 = 소유
	
		System.out.println(oop01.number);	//90
		oop01.number = 1000;
		System.out.println(oop01.number);	//1000
		
		oop01.print2();	//print2
		System.out.println(oop01.print3()); //0	
		System.out.println(oop01.print4()); //Hello
		System.out.println(oop01.print5()); // 3.14
		
		
		Apple apple = new Apple();
		apple.print();	//Apple
		
		//다른 메소드를 실행시키기 위해서 호출
		
	}
	//2	M - Code
	void print2() {
		System.out.println("print2");
	}
	int print3() {
		return 0;
	}
	String print4() {
		return "Hello";
	}
	
	double print5() {
		return 3.14;
	}
}

//1 Class = M - Code
// 클래스 생성, 메소드생성, 코드

class Apple{//class
	public void print() {
		System.out.println("Apple");	//code
	}
}

 

  • 절차지향은 하나의 로직을 순서대로 진행하여 처리
  • 객체지향은 객체의 호출 순서에 영향을 받는다. 

 

객체를 만들어서 순서에 연연하지 않고 자주 쓰거나필요한 부분은 따로 정의 하여 모듈화 하는 등의 장점을 가진 방법 
 

객체 = 현실에 존재하는 사물들 
 

클래스 = 객체를 컴퓨터에서 구현하기 위해서 필요한 설계도 같은 개념 
 

인스턴스 = 메모리 상에 만들어진 객체 
  
메소드 = 클래스 속에 존재 어떤 기능을 수행하는 명령문장들

 

class NoteBook{
	String game;
	String power;
	int memory = 1024;
	
	void runGame() {
		System.out.println(game + "을 실행합니다.");
	}
	
	void power(String stats) {	//가상 변수
		System.out.println("노트북 : " + stats);
	}

	int addMemory(int memory) {	// 지역 가상 변수
		memory += this.memory;	// 인스턴스 변수
		return memory;
	}
}

public class OOP02 {
	public static void main(String[] args) {
		
		//클래스에서 인스턴스 생성하기
		
		NoteBook nt = new NoteBook();
		
		nt.power("On");	//노트북 : On
		nt.game = "diablo4";	
		nt.runGame();	//diablo4을 실행합니다.
		int result = nt.addMemory(1024); 
		System.out.println("1024를 추가하면 " + result + "가 됩니다."); //1024를 추가하면 2048가 됩니다.
		
		NoteBook ss = new NoteBook();
		nt.memory += 2048;
		System.out.println(nt.memory);	//3072
		System.out.println(ss.memory);	//1024
		System.out.println(ss.game);	//null		
	}
}

 

객체와 인스턴스


클래스에 의해서 생성된 객체를 인스턴스라고 한다.
객체와 인스턴스의 차이는?
   
Animal a1 = new Animal(); 로 생성된 a1은 객체
   
a1 객체는 Animal의 인스턴스(istance)
   
즉 인스턴스라는 말은 특정 객체가 어떤 클래스의 객체인지를 관계위주로 설명할때 사용
   
즉, "a1은 인스턴스"보다는 'a1은 Animal의 인스턴스' 라는 표현이 더 잘어울린다.
   
클래스와 인스턴스
과자를 만드는 과자틀과 만들어진 과자
   
과자틀 -> 클래스
과자   -> 객체 - 인스턴스
   
Animal a1 = new Animal();
Animal a2 = new Animal();
Animal a3 = new Animal();
Animal a4 = new Animal();
Animal a5 = new Animal();
Animal a6 = new Animal();    

 

class Animal{
	String name;	//참조형의 기본값 null
	int a;			//정수형의 기본값 0
	double d;		//실수형의 기본값 0.0
	char c;			//문자형의 기본값 0
	boolean t;	//논리형의 기본값 false
	
	//null
//	name을 실행하면 null
//	null이라는 것은 값이 할당되지 않은 상태
//	Animal이라는 클래스의 인스턴스 변수로 name을 추가하였지만
//	아무런 값도 대입하지 않았기 때문에 null이라는 값 출력
	
	//메소드
	public void setName(String name) {	//저장
		this.name = name;
	}
	public String getName() {	//값 불러오기
		return this.name;
	}	
}

class Apple2{
	//인스턴스 변수
	
	// 메소드
}

/*	위 Apple2 클래스는 가장 간단한 클래스
    클래스 선언만 있고 내용이 없는 껍데기 클래스
    인스턴스 생성 가능
 */

public class OOP03 {
	public static void main(String[] args) {
		
		Animal r2d2 = new Animal();
		//r2d2.name = "R2D2";
		
		Animal cat = new Animal();
		cat.name = "동수";
		
		Animal dog = new Animal();
		dog.name = "3PO";
		
		System.out.println(r2d2.name);	//null
		System.out.println(r2d2.a);		//0
		System.out.println(r2d2.d);		//0.0
		System.out.println(r2d2.c);		//0
		System.out.println(r2d2.t);		//false
		
		System.out.println(cat.name);	//동수
		System.out.println(dog.name);	//3PO
		
		cat.setName("동수set");	//set
		System.out.println(cat.getName());	//동수set
	}
}

 

 

반응형