자바 객체지향 1

20614 단어 JavaprogramingJava
  • 객체지향 언어
    - 코드의 재사용성이 높고 유지보수가 용이. 중복 코드 제거

    핵심개념

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

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

  • 객체 = 속성(변수) + 기능(메서드)
    - 객체 : 모든 인스턴스를 대표하는 일반적 용어
    - 인스턴스 : 특정 클래스로부터 생성된 객체 (예: Tv인스턴스)

Q. 클래스가 왜 필요한가?
A. 객체를 생성하기 위해


Q. 객체가 왜 필요한가?
A. 객체를 사용하기 위해


Q. 객체를 사용한다는 것은?
A. 객체가 가진 속성과 기능을 사용하려고

  • 객체의 생성과 사용

    //1 .객체의 생성
    Tv t;          //클래스명 변수명;
    t = new Tv();  //변수명 = new 클래스명();
    
    //2. 객체의 사용
    t.channel = 7;
    t.channelDown();
    System.out.println("현재 채널은" + t.channel + "입니다.");
  • 클래스 1.설계도 2.데이터+함수 3.사용자 정의 타입

    class Variables {
    	int iv; // 인스턴스 변수
        static int cv; //클래스 변수(static변수, 공유변수)
       
       void method() {
       int lv = 0; // 지역변수
       }
    }
    • 클래스 변수(static) : 클래스가 메모리에 올라갈 때 생성 -> 객체생성 필요x, 참조변수 필요x, 그냥 사용가능
    • 인스턴스 변수 : 인스턴스가 생성되었을 때 생성
    • 지역변수 : 변수 선언문이 수행되었을 때 생성

    ❓ CV : 모든 객체가 공유하는 값

    • 메서드
      1 .작업단위로 문장들을 묶어서 이름 붙인 것
      2 .값(입력)을 받아서 처리하고, 결과를 반환(출력)
    int add (int x, int y) {
    	int result = x + y; 
       return result; //결과를 반환
    }
  • return문
    - 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.

  • 호출 스택(call stack)
    - 메서드 수행에 필요한 메모리가 제공되는 공간
    - 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
    - 스택(stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.

  • 기본형 매개변수
    - 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.
    - 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다.

    ⛔ 6-23 기본형 매개변수 다시 ⛔

    class Data { int x; }
    class Ex6_6 {
    	public static void main (String[] args) {
      	Data d = new Data();
          d.x = 10;
          System.out println("main() : x = " + d.x);
          
          change(d.x);
          System.out.println("After change(d.x)");
          System.out.println("main() : x = " + d.x);
      }
      static void change(int x) { //기본형 매개변수
      	 x = 1000;
           System.out.println("change() : x = " x);
      }
    }

    ⛔ 6-24 참조형 매개변수 다시 ⛔

    class Data2 { int x; }
    class Ex6_7 {
    	public static void main(String[] args) {
      	Data2 d = new Data2();
          d.x = 10;
          System.out.println("main() : x = " + d.x);
          
          change(d);
          System.out.println("After change(d)");
          System.out.pringln("main() : x = " + d.x);
      }
      static void change(Data2 d) { //참조형 매개변수
      	d.x = 1000;
          System.out.pringln("change() : x = " + d.x);
      }
    }
  • 인스턴스 메서드
    - 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출
    - 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드
    - 메서드 내에서 인스턴스 변수(iv) 사용가능

  • static 메서드 (클래스 메서드)
    - 객체생성 없이 '클래스이름. 메서드이름()'으로 호출
    ex) Math.random(), Math.round()
    - 인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드
    - 메서드 내에서 인스턴스 변수(iv) 사용불가

    class MyMath {
    	long a, b; //인스턴스 변수
      
      long add() { //인스턴스 메서드(iv 사용)
      	return a+b;
       }   
      static long add(long a, long b) { //클래스 메서드(static 메서드)
      	 return a+b;
      }
    }
    
    class MyMathTest {
    	public static void main(String args[]) {
      	System.out.println(MyMath.add(200L, 100L); //클래스메서드 호출
          MyMath mm = new MyMath(); //인스턴스 생성
          mm.a = 200L;
          mm.b = 100L;
          System.out.println(mm.add()); //인스턴스메서드 호출
      }
    }
  • static 사용방법
    - 속성(멤버변수)중에서 공통 속성에 static을 붙인다.
    - 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 static을 붙인다.

    ⛔ 6-27 static 변수/메서드와 instance 변수/메서드 관계 정리 다시 ⛔

  • 오버로딩 (overloading)
    - 한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것

    오버로딩이 성립하기 위한 조건
    1 .메서드 이름이 같아야 한다.
    2 .매개변수의 개수 또는 타입이 달라야 한다.
    3 .반환 타입은 영향없다.

  • 생성자(constructor)
    - 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
    - 인스턴스 생성시 수행할 작업(iv 초기화)에 사용

    생성자 규칙
    1 .이름이 클래스 이름과 같아야 한다.
    2 .리턴값이 없다(void 안붙임)
    3 .모든 클래스는 반드시 생성자를 가져야 한다.

  • 기본생성자
    - 매개변수가 없는 생성자
    - 생성자가 하나도 없을 때만, 컴파일러가 기본 생성자 자동 추가
    (기본생성자가 반드시 있어야함)

  • 생성자 this()
    - 생성자에서 같은 클래스의 다른 생성자 호출할 때 사용
    - 다른 생성자 호출시 첫 줄에서만 사용가능

  • 참조변수 this
    - 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
    - 인스턴스 메서드(생성자 포함)에서 사용가능
    - 지역변수 (lv)와 인스턴스 변수(iv)를 구별할 때 사용

Car(String color, String gearType, int door) {
	//this.color는 iv, color는 lv
    this.color = color;
    this.gearType = gearType;
    this.door = door;
}
class MyMath {
	long a, b; //this.a, this.b
    
    MyMath(int a, int b) { //생성자
    	this.a = a;
        this.b = b;
    }
    long add() { //인스턴스 메서드
    	return a+b; //return this.a+this.b;
    }
    static long add(long a, long b) { //클래스 메서드(static메서드)
    return a+b;
    }
}
  • 변수의 초기화
    - 지역변수(lv)는 수동 초기화 해야함(사용전 반드시)
    - 멤버변수(iv, cv)는 자동 초기화된다.

    멤버변수의 초기화 방법
    1 .명시적 초기화(=) - 간단초기화
    2 .초기화 블럭 {}/ static{} - 복잡초기화
    3 .생성자(iv초기화) - 복잡초기화


    클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번
    인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다

좋은 웹페이지 즐겨찾기