Java Class Notes

객체 / OPP (Object-Oriented Programming)

헤일리유 2023. 2. 21. 17:26

객체지향 Object-Oriented Programming

객체들이 메세지(message)를 통하여 통신함으로써 원하는 결과를 얻는다.

각 객체는 고유의 데이터와 데이터를 처리할 수 있는 메소드(method)로 구성

vs 

절차지향 Procedural Programming

구조적 프로그래밍

데이터 구조와 그 데이터를 변화시는 알고리즘으로구성

 

 


 

 

객체지향 Object-Oriented Programming

 

객체 지향 프로그래밍 

- (Object-Oriented Programming, OOP)

- 부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 비법

 

 

객체란?  What's an Object?

- 프로그래밍에서 객체란 상태와 행위의 집합체다. (속성(field, data)과 메소드(function,behavior))

- 물리적으로 존재하는 것 (자동차, 책, 사람)

- 추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것

- 객체는 field(속성)과 method(동작)로 구성된 자바 객체로 모델링 가능

 

객체간의 관계

- 객체지향 프로그램에서는 객체는 다른 객체와 관계를 맺음

- 관계의 종류

  • 집합 관계 : 완성품과 부품의 관계
  • 사용 관계 : 객체가 다른 객체를 사용하는 관계
  • 상속 관계 : 종류 객체와 구체적인 사물 객체 관계

 

 


 

클래스 (Class)

 

클래스 (Class)란?

서로 공통되는 구조를 가지고 있는 객체를 모아 이 객체들이 가지고 있는 데이터 영영ㄱ의 구조와 각각의 객체가 수행할 수 있는 메소드들을 정희한 객체를 의미한다. 한마디로 일반화된 속성과 메소드로 객체를 기술한 것을 클래스라고 한다.

 

- 객체는 항상 클래스로부터 생성된다. 즉 클래스는 객체를 생성하는 형판(template)

- 클래스는ㄴ 두개의 구성요소(member)인 자료구조(필드)와 연산(메소드)를 가진다

- 클래스로부터 생성된 객체를 instance라 한다

       객체 = instance

- 정보처리의 주체는 클래스가 아니라 객체이다

- 객체지향 프로그래밍의 시작은 클래스의 생성이다

 

 

클래스와 객체의 정의와 용도

- 클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다

- 클래스의 용도 : 클래스는 객체를 생성하는데 사용된다

 

- 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념

- 객체의 용도 : 객체의 속성과 기능에 따라 다름

 

 

 

객체와 인스턴스 (Object and Instance)

Object != Instance

- 객체는 인스턴스를 포함하는 일반적인 의미

        책상은 인스턴스다         책상은 책상 클래스의 객체다
        책상은 개체다         책상은 책상 클래스의 인스턴스다

인스턴스화 (instantiate)

- 클래스로부터 인스턴스를 생성하는 것

클래스 >>> (인스턴스화) >>> 인스턴스(객체)

 

 

 

객체의 구성요소 - 속성과 기능

객체는 속성과 기능으로 이루어져 있다.

- 객체는 속성과 기능의 집합이며 속성과 기능을 객체의 멤버(구성요소)라고 한다

 

속성은 변수로, 기능은 메서드로 정의한다.

- 클래스를 정의할 때 객체의 속성은 변수로, 기능은 메서드로 정의한다.

 

속성 - 크기 / 길이 / 높이 / 색상 / 볼륨 / 채널 등

기능 - 켜기 / 끄기 / 볼륨 업 / 볼륨 다운 / 채널 바꾸기 등

 

 

Example of Class

Class Triangle { //속성들(필드들)
	Point A;
    Point B;
    Point C;
    Color color; 
    Image pattern;
	//메소드들
    void draw(){
        //실제 그리는 부분 
    }
    void move(){
    	//각 점 위치를 변경시키는 부분
    }
    void serColor(){
    }
		//색깔을 변경시키는 부분
}
class SampleClass { // 클래스 헤더부분 int a;
int b; // 멤버 변수 부분 int c;
public SampleClass() {
// 생성자 부분. 이름이 클래스 명과 같다
a = x; b = y; c = z;
  }
  public int sum() {
int d;
d = a + b + c; }
}

 

 

객체지향의 특성

- 상속(inheritance) : 부모의 변수와 메서드를 내 것처럼 사용하는 것 / 일반화(generization)

        동물 : 움직인다, 입, 다리

        - 사람 : 두 다리로 걷는다

        - 돼지 : 네 발로 걷는다

 

- 정보은닉(information hidden) / 캡슐화 (encapsulation)

        접근 지정자

- 다형성(polymorphism) : 하나의 기능을 다양하게 사용하는 것

- 추상화 : 설계

        고객 : 머리카락, 코, 입, 이름, ... etc.

        병원 고객 : 이름, 주소, 전화번호, 병, 건강, 방문기록

        의류 고객 : 이름, 주소, 전화번호, 좋아하는 색, 좋아하는 디자인

 

 

 

 

 

 

 

접근 제어자

 

- public : 해당 클래스의 필드와 메소드의 사용을 다른 모든 클래스에 허용 그리고 이들은 서브클래스로 상속된다.

- protected : 클래스의 멤버를 클래스 자신과 이 클래스로부터 상속받은 서브클래스에만 접근을 허용
- private : 해당 클래스만이 이 멤버를 사용할수 있다. 외부객체에서는 절대로 접근을 할 수 없다.

- default : 접근제어자를 명시하지 않은 경우의 디폴트 접근제어자이다. 같은 패키지내의 클래스들은 public 권한을 갖고 접근가능하다.

- final : 서브클래스를 가질수 없는 클래스

- abstract : 추상 메소드를 가지는 추상 클래스를 의미

 

 

 

 

 

 


 

변수 (Variable)

 

 

 

 

선언 위치에 따른 변수의 종류

(변수의 선언위치가 변수의 종류와 범위(scope)을 결정한다.)

 

인스턴스변수(instance variable)

- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장가능

- 인스턴스 생성 후, 참조변수.인스턴스변수명’으로 접근
- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에

의해자동제거됨

 

클래스변수(class variable)

- 같은 클래스의 모든 인스턴스들이 공유하는 변수

- 인스턴스 생성없이 ‘클래스이름.클래스변수명’으로 접근
- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸

 

지역변수(local variable)

- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸

- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸

 

  변수의 종류     선언 위치      생성 시기  
인스턴스 변수 클래스 영역 인스턴스 생성시
클래스 변수 클래스가 메모리에 올라갈때
지역 변수 메소드 영역 해당 메소드가 호출될때

 

 

 

 

 

Instance Variable

 

- 인스턴스 생성 후, 참조변수.인스턴스변수명으로 접근

- 생성 시기 : 인스턴스가 생성될 때

Variables var = new Variable(); // 인스턴스 생성 
var.instanceVar = 10 // 참조변수.인스턴스변수명

Class Variables

class Variables {
	int instanceVar; // 인스턴스변수    클래스 영역 
    static int staticVar; // 클래스변수 
    void method( ) {
		int localVar; // 지역변수    메소드 영역
	} 
}

 

 

 

Class Variable

- 동일 클래스 내의 모든 인스턴스들이 공유하는 변수

- 인스턴스 생성없이 클래스이름.클래스변수명으로접근

- 생성과소멸: 클래스가로딩될때생성, 프로그램종료될때소멸

Variables.staticVar = 10; // 클래스이름.클래스변수명
class Variables {
	int instanceVar; // 인스턴스변수	클래스 영역 
	static intstaticVar; // 클래스변수 
    void method( ) {
		int localVar; // 지역변수	메소드 영역
	} 
}

 

 

 

Local Variable

- 메소드 내에 선언되며, 메소드가 실행될 때 생성되고, 종료와 함께 소멸

- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸

Variables var=newVariable(); //인스턴스생성 
var.methed() // 참조변수.메소드명
class Variables {
	int instanceVar; // 인스턴스변수	클래스 영역
    static intstaticVar; // 클래스변수 
    void method( ) {
		int localVar; // 지역변수	메소드 영역
	} 
}

 

 

 

 

 

클래스 변수와 인스턴스 변수

인스턴스변수 : 인스턴스가 생성될 때마다 생성, 인스턴스 마다 각기 다른 저장 공간 생성 - 동적변수

클래스변수:클래스가로딩될때한번만생성, 하나의저장공간을공유, 공통된 값을 갖는 경우 - 정적변수

 

 

 

 

 

 

클래스 변수

▶자바에서의 변수는 다음과 같은 형식으로 선언된다

[public/private/protected] [static/final] 데이터형 변수이름;

☞클래스 변수는 static을 붙여 선언한다

☞클래스 변수는 전역변수의 개념을 가진다.

 

▶클래스 변수의 용도

☞객체 변수(객체참조,객체속성)는 객체가 생성될 때마다 각 객체에 변수들이 생성되지만, 클래스 변수는 클래스로부터 생성된 객체들의 수와 상관없이 하나만 생성

☞한 클래스로부터 생성된 모든 객체들은 클래스 변수를 공유 ☞클래스 변수를 이용하여 객체들 사이의 통신에 사용하거나 객체들의

공통 속성을 나타낼 수 있다.
☞객체변수와는 달리 클래스 변수는 클래스 이름을 통하여 접근