📚 참고
자바의 정석 기초편 (객체지향개념만)

 

 

 

 

 

 

 

클래스와 객체

 

  • 클래스 정의 : 객체를 정의해 놓은 것
  • 클래스 용도 : 객체를 생성하는데 사용
  • ex) 제품 설계도, TV 설계도

 

  • 객체 정의 : 실제로 존재하는 것. 사물 또는 개념
  • 객체 용도 : 객체가 가지고 있는 속성(변수)과 기능(메서드)에 따라 다름
  • ex) 제품, TV

 

 

 

 

 

 

 

객체의 구성요소

 

  • 객체 = 속성(변수) + 기능(메서드)
  • 속성(변수) : 색상, 전원, 채널
  • 기능(메서드) : 켜기, 끄기, 채널 변경하기

 

// Tv 클래스
class Tv {
    String color;
    boolean power;
    int channel;
    
    void power() { power = !power; }
    void channelUp { channel++; }
    void channelDown() { channel--; }
}

 

 

 

 

 

 

 

객체와 인스턴스

 

  • 객체 : 모든 인스턴스를 대표하는 일반적 용어
  • 인스턴스 : 특정 클래스로부터 생성된 객체 (ex. Tv 인스턴스)

 

 

 

 

 

 

 

 

정리

 

Q. 클래스가 왜 필요한가?

A. 객체 생성을 위해 (클래스 = 설계도, 객체 = 제품)

 

 

Q. 객체가 왜 필요한가?

A. 객체를 사용하기 위해

 

 

Q. 객체를 사용한다는 것은 어떤 의미인가?

A. 객체가 가진 속성과 기능을 사용한다는 것

 

 

 

 

 

 

 

한 파일에 여러 클래스 작성

 

  • 원래는 하나의 파일에 하나의 클래스, 그러니까 1:1 관계가 보통임

 

 

 

Hello2.java

public class Hello2 {}
	   class Hello3 {}

 

  • public class가 있는 경우, 소스파일의 이름은 반드시 public class명과 일치해야한다.
  • 하나의 소스파일에는 하나의 public class만 존재해야한다.

 

 

 

Hello2.java

class Hello2 {}
class Hello3 {}

 

  • public class가 없는 경우, 소스파일의 이름은 둘 다 가능하다.
  • 하나의 소스파일에 클래스가 2개 있는 경우 main 메서드가 있는 클래스명과 소스파일명이 같아야 이클립스(IDE)가 실행할 수 있다.

 

 

 

 

 

 

 

객체의 생성과 사용

 

 

객체의 생성

 

  1. 해당 클래스 타입의 참조변수 선언
  2. 해당 클래스로부터 인스턴스 생성
  3. 생성된 인스턴스를 참조변수에 저장

 

class Tv { 
	// Tv의 속성(멤버변수)   
	String color;           // 색상 
	boolean power;         	// 전원상태(on/off) 
	int channel;           	// 채널 

	// Tv의 기능(메서드) 
	void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드  
	void channelUp()   {  ++channel; }  // TV의 채널을 높이는 기능을 하는 메서드 
	void channelDown() { --channel; }   // TV의 채널을 낮추는 기능을 하는 메서드  
}
Tv t;
t = new Tv();

// 한 줄로 간단하게 표현
Tv t = new Tv();

 

 

 

 

 

 

 

객체의 사용

 

t.channel = 7;		// 변수 사용
t.channelDown();	// 메서드 사용

 

 

 

 

 

 

 

예제-1

 

Tv t1 = new Tv();
Tv t2 = new Tv();
t1.channel = 7;

System.out.println(t1.channel);		// 7
System.out.println(t2.channel);		// 0

 

 

 

 

 

 

 

예제-2

 

Tv t1 = new Tv();
Tv t2 = new Tv();
t2 = t1;
t1.channel = 7;

System.out.println(t1.channel);		// 7
System.out.println(t2.channel);		// 7

 

 

 

 

 

 

 

정리

 

 

  • 하나의 인스턴스를 여러개의 참조변수가 가리키는 것  ➡  가능
  • 여러개의 인스턴스를 하나의 참조변수가 가리키는 것  ➡  불가능

 

 

 

 

 

 

 

객체 배열

 

  • 객체 배열 == 참조변수 배열

 

 

 

 

 

// 객체를 생성하여 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

 

 

 

 

 

 

 

클래스 정의

 

  1. 설계도
  2. 데이터 + 함수의 결합
  3. 사용자 정의 타입

 

 

 

 

 

 

 

데이터 + 함수의 결합

 

  • 데이터 저장공간의 히스토리
    • 1. 변수 : 하나의 데이터를 저장할 수 있는 공간
    • 2. 배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
    • 3. 구조체 : 서로 관계있는 여러 종류의 데이터를 하나로 저장할 수 있는 공간
    • 4. 클래스 : 서로 관계있는 데이터 + 함수의 결합 (구조체 + 함수)

 

 

 

 

 

 

 

사용자 정의 타입

 

  • 원하는 타입을 직접 만들 수 있다.
    • 서로 관련된 것들을 강하게 묶어줄 수 있다.
    • 코드가 덜 복잡해지고 유지보수가 수월하다.

 

 

 

비객체지향적

 

int hour = 12;
int minute = 34;
int second = 56;

 

 

 

객체지향적

 

class Time {
    int hour;
    int minute;
    int second;
}

Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;

 

 

 

 

 

 

 

 

 

 

'JAVA > 객체지향개념' 카테고리의 다른 글

기본형 매개변수, 참조형 매개변수 차이점  (0) 2021.03.09
호출 스택 (Call Stack)  (0) 2021.03.07
메서드 (Method)  (0) 2021.03.06
선언위치에 따른 변수종류  (0) 2021.03.06
객체지향 언어  (0) 2021.03.02