자바 객체 지향 프로그래밍 - 객체, 클래스, 변수

계리·2022년 9월 28일
0
post-thumbnail
  • 객체
  • 클래스
  • 변수

객체지향프로그래밍(OOP : Object - Oriented Programming)

  • 객체 지향 프로그래밍 장점
    1. 코드의 재사용성이 높다.
      새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
    2. 코드의 관리가 용이하다.
      코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 작성할 수 있다.
    3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
      제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다.
    4. 자연적인 모델링
      여기서 모델링은 현실 세계의 객체를 소프트웨어 객체로 설계하는 것이다. 우리 일상생활의 모습 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것들을 그대로 자연스럽게 구현할 수 있다.

  • 클래스와 객체

    1. 클래스
      객체를 생성하기 위한 틀이며 속성과 기능으로 정의되어 있다

      클래스 정의 - 객체를 정의해놓은 것
      클래스 용도 - 객체를 생성하는데 사용

    2. 객체
      존재하는 사물(사람, 자동차, 책상, 의자 등등)이나 눈에 보이지 않는 추상적인 것들(수학공식, 프로그램 에러와 같은 논리나 개념) 나타내는 것을 객체라고 한다.

      객체 정의 - 실제로 존재하는 것, 사물 또는 개념
      객체 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름


클래스와 객체의 예시

클래스객체
제품 설계도제품
TV 설계도TV
붕어빵 기계붕어빵

  • 객체와 인스턴스
    클래스로부터 객체를 만드는 과정을 인스턴스화(instantiate)
    어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)

  • 인스턴스의 생성과 사용
    예시 1)

class TV{
	-- Tv의 속성(멤버변수 or 필드)
    String color;  -- 색상
    boolean power; -- 전원상태(on/off)
    int channer;   -- 채널
    
    -- Tv의 기능(메서드)
    void power() { power = !power };  -- TV를 켜거나 끄는 기능을 하는 메서드
    void channerUp() { ++channel };   -- TV의 채널을 높이는 기능을 하는 메서드
    void chaanerDown() { --channel }; -- TV의 채널을 낮추는 기능을 하는 메서드
}

class TvTest {
	public static void main(String args[]){
    	TV t;             -- Tv 클래스 타입의 참조변수(Tv인스턴스) t를 선언
        t = new Tv();     -- 연산자 new에 의해 Tv클래스의 선언된 멤버변수
                             값들을 기본값으로 초기화(Tv인스턴스 생성)
        t.channel = 7;    -- 참조변수 t에 있는 멤버변수 channel에 7을 저장
        t.channelDown();  -- Tv 인스턴스의 메서드 channelDown() 호출
    }
}

예시 1) 그림으로 객체 생성 예시

  1. Tv t;
    Tv클래스 타입의 참조변수 t를 선언하면 메모리에 참조변수 t를 위한 공간이 마련되지만 아직 인스턴스는 생성이 되지 않아 참조변수로 아무것도 할 수 없다.

  1. t = new Tv();
    연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 주소가 100인 곳에 생성되었다고 가정하고, 이 때 멤버변수들은 각 변수 타입에 맞는 기본값으로 초기화 된다.

그 다음에 대입연산자(=)에 의해 생성된 객체의 주소값이 참조변수 t에 저장되어 참조변수 t가 Tv인스턴스에 접근할 수 있다.

  1. t.channel = 7;

참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다.

  1. t.channelDown();
    참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown 메서드를 호출한다. channelDown 메서드 안에 있는 멤버변수 channel의 값을 1 감소 시킨다.

인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

예시 2)

class TV{
	-- Tv의 속성(멤버변수 or 필드)
    String color;  -- 색상
    boolean power; -- 전원상태(on/off)
    int channer;   -- 채널
    
    -- Tv의 기능(메서드)
    void power() { power = !power };  -- TV를 켜거나 끄는 기능을 하는 메서드
    void channerUp() { ++channel };   -- TV의 채널을 높이는 기능을 하는 메서드
    void chaanerDown() { --channel }; -- TV의 채널을 낮추는 기능을 하는 메서드
}

class TvTest {
	public static void main(String args[]){
    	TV t1 = new Tv();  -- Tv t1; t1 = new Tv(); 를 한문장으로 줄임
        TV t2 = new Tv();
        
        t1.channel = 7;    -- channel값을 7로 저장
    }
}

예시 2) 그림으로 객체생성 예시

  1. Tv t1 = new Tv();
    Tv t2 = new Tv();

인스턴스 t1과 t2생성

  1. t1.channel = 7;
    t1이 가리키고 있는 인스턴스의 멤버변수 channel 값을 7로 변경

변수

class Variable{
	int iv;			// 인스턴스 변수
    static int cv;	// 클래스 변수(static변수, 공유 변수)
    
    void method(){
    	int lv = 0;	// 지역 변수
    }

}
변수의 종류선언위치생성시기
클래스 변수클래스 영역클래스가 메모리에 올라갈 때
인스턴스 변수클래스 영역인스턴스가 생성되었을 때
지역 변수클래스 영역 이외의 영역변수 선언문이 수행되었을 때
  1. 인스턴스 변수
    클래스 영역에 선언되며 클래스의 인스턴스를 생성할 때 만들어진다. 인스턴스 변수를 사용하기 위해서는 인스턴스를 먼저 생성해야 사용 가능하다.

  2. 클래스 변수
    인스턴스 변수 앞에 static을 붙이면 사용 가능하다. 인스턴스마다 독립적인 저장공간을 갖는 인스턴스변수와 달리 클래스변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우 클래스변수로 선선해야 한다.

  3. 지역 변수
    매서드 내에 선언되어 메서드 내에서만 사용 가능하며 메서드가 종료되면 소멸되어 사용할 수 없게 된다. for문 또는 while문의 블럭 내에 선언된 지역변수는 블럭{} 내에서만 사용 가능하고 벗어나면 소멸되어 사용할 수 없게 된다.


※ 참고 문헌

남궁성, 『Java의 정석 3nd Edition』, 도우출판(2016) 책으로 공부하고 정리한 내용 입니다.

profile
gyery

0개의 댓글