OOP : Object Oriented Programming

  • 객체지향 프로그래밍
  • 기존의 프로그래밍 언어에 몇천가지 새로운 규칙을 추가한 보다 발전된 언어이다.

장점

  • 코드의 재사용성이 높다. : 어디에 들어가도 호환될 수 있게 만들어야 함
  • 코드의 관리가 용이하다.
  • 신뢰성이 높은 프로그래밍이 가능하다.

클래스 (된장찌개 레시피)

  • 객체 (된찌) 를 정의해 놓은 것.
  • 설계도
    • 클래스-----객체
      Tv설계도----TV
      붕어빵틀--붕어빵

객체

구성요소

속성

-멤버변수 : 전원, 볼륨, 색상, 채널...

기능

  • 메서드 (,행위, function..) : 켜기, 끄기, 볼륨올리기, 채널 올리기...

인스턴스

  • Tv클래스의 인스턴스 : Tv클래스로부터 만들어진 객체 (인스턴스 ≒ 객체)

인스턴스화 : 클래스로부터 객체를 만드는 과정

  • 방법
    • 클래스명 변수명; -> 참조변수를 선언
    • 변수명 = new 클래스명(); -> 해당 클래스의 인스턴스를 생성 후 인스턴스의 주소를 변수에 저장
Tv t = new Tv();
//대입연산자 기준
  • 순서
    • 대입연산자가 있으니 왼쪽부터
      • 왼쪽: Data클래스 타입의 지역변수 d1이 main()안에 선언됨
      • 오른쪽: new 연산자에 의해 Heap 영역에 Data클래스의 인스턴스가 생성됨 -> 인스턴스변수와 인스턴스메서드가 자동로드
      • 대입연산자: 참조변수에 대입됨

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

class Ex2_26{
	int iv;		//인스턴스변수(클래스영역)
    static int cv;	//클래스 변수 (클래스영역)
    
    void method(){
    	int iv = 0	//지역변수 (메서드영역)
    }
}

전역변수(멤버변수)

클래스변수 Class Variable

  • 클래스이름.클래스변수
  • 클래스의 영역에 선언된다
  • 클래스가 Method Area로 로드 될 때 같이 생성된다.
  • 한 클래스의 모든 인스턴스들이 동일한 공통값을 가져야할 때 사용(카드의 width, height)
  • 인스턴스변수 앞에 static만 붙이면 된다.

인스턴스변수 Instance Variable

  • 참조변수명.인스턴스변수명
  • 클래스의 영역에 선언된다.
  • 클래스의 인스턴스가 생성될 때 Heap Area에 생성된다.
  • 인스턴스마다 독립적인 저장공간을 가진다. (각각 다른 값을 가진다) (카드의 그림, 숫자)
  • 인스턴스마다 고유한 값을 가져야 하는 경우 해당 변수는 인스턴스 변수로 선언해야한다.

지역변수 Local Variable

  • 클래스 영역 이외의 영역에 선언된다.
    • 메서드, 생성자, 초기화, 블럭 내부
  • 메서드 종료 시 같이 소멸된다.

예시

class CardTest{
	public static void main(String[] args){
    	//1. Card 클래스의 폭을 출력
        //클래스명 호출방식: 클래스명.클래스변수명
        System.out.println(Card.height);
        
        //2. Card 클래스의 폭을 출력
        System.out.println(Card.width);
        
        //3. Card 클래스의 객체를 생성. 변수명: cd1
        //객체생성방식: 클래스명 참조변수명 = new 클래스명();
        Card cd1 = new Card();
        //1) 대입연산자 기준 왼쪽부터 시작
        //2) 왼쪽: 참조변수 cd1이 선언됨
        //3) 오른쪽: heap에 인스턴스 생성 후, 인스턴스 주소가 만들어지고 값이 로드됨.
        //4) =: 주소값이 참조변수 cd1에 저장됨
        
        //4. 변수 cd1의 이름을 "Daniel"로 변경.
        //인스턴스변수 호출: 참조변수명.인스턴스변수명
        cd1.name="Daniel";
        //5. 변수 cd1의 직원 번호을 "19961210"로 변경.
        cd1.number=19961210;
        //6. Card 클래스의 폭을 70으로 변경.
        Card.width=70;	//cd1.width라고 해도 됨
        //7. Card 클래스의 높이를 100으로 변경.
        Card.height=100;
    }
}

class Card{
	String name;
    int number;
    static int width = 100;
    static int height = 250;

}
profile
갈 길이 멀다

0개의 댓글