객체지향 프로그래밍

노영조 ㅣ 2023. 1. 12. 20:58

객체지향 언어

1. 코드의 재사용성이 높다

      - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2. 코드의 관리가 용이하다.

      - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.

      - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여

        코드의 불일치로 인한 오작동을 방지할 수 있다.

 

객체지향 언어의 특징

  1. 캡술화
  2. 상속
  3. 추상화
  4. 다형성

 

클래스와 객체

  • 클래스 : 객체를 정의해 놓은 것
  • 클래스의 용도 : 객체를 생성하는데 사용
  • 객체 : 실제로 존재하는 사물 또는 개념
  • 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름.

 

객체의 생성과 사용

  • 클래스명 변수명;               // 클래스의 객체를 참조하기 위한 참조변수를 선언
  • 변수명 = new 클래스명(); // 객체를 생성 후, 객체의 주소를 참조변수에 저장
class Ex6_1 { 
	public static void main(String args[]) { 
		Tv t;                 // Tv인스턴스를 참조하기 위한 변수 t를 선언       
		t = new Tv();         // Tv인스턴스를 생성한다. 
		t.channel = 7;        // Tv인스턴스의 멤버변수 channel의 값을 7로 한다. 
		t.channelDown();      // Tv인스턴스의 메서드 channelDown()을 호출한다. 
		System.out.println("현재 채널은 " + t.channel + " 입니다."); 
	} 
}

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의 채널을 낮추는 기능을 하는 메서드  
}

클래스의 정의

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

 

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

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

 

메서드란?

  1. 작업을 수행하기 위한 명령문의 집합
  2. 어떤 값을 입력받아서 처리하고 그 결과를 돌려준다. (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.)
class Ex6_4 {
	public static void main(String args[]) {
		// MyMath 객체 생성
        MyMath mm = new MyMath();   
        // MyMath 객체 사용(객체의 메서드 호출)
		long result1 = mm.add(5L, 3L);
		long result2 = mm.subtract(5L, 3L);
		long result3 = mm.multiply(5L, 3L);
		double result4 = mm.divide(5L, 3L);

		System.out.println("add(5L, 3L) = " + result1);
		System.out.println("subtract(5L, 3L) = " + result2);
		System.out.println("multiply(5L, 3L) = " + result3);
		System.out.println("divide(5L, 3L) = " + result4);
	}
 }

 // MyMath 클래스 작성(메서드 작성)
 class MyMath {
	long add(long a, long b) {
		long result = a + b;
		return result;
	}
	long subtract(long a, long b) { return a - b; }
	long multiply(long a, long b) { return a * b; }
	double divide(double a, double b) {
		return a / b;
	}
 }

 

호출스택

  • 메서드 수행에 필요한 메모리가 제공되는 공간
  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
class CallStackTest {
	public static void main(String[] args) {
		firstMethod();
	}
	static void firstMethod() {
		secondMethod();
	}
	static void secondMethod() {
		System.out.println("secondMethod()");
	}
}

  • 메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다.
  • 메서드가 수행을 마치고나면 사용했던 메모리를 반환하고 스택에서 제거된다.
  • 호출스택의 제일 위에 있는 메서드가 현재 실행중인 메서드이다.
  • 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.

'Java' 카테고리의 다른 글

컬렉션 프레임워크II  (0) 2023.03.27
Collections Framework  (0) 2023.03.08
객체지향 프로그래밍 IV  (0) 2023.02.22
객체지향 프로그래밍 III  (0) 2023.02.09
객체지향 프로그래밍II  (0) 2023.01.25