language/java

6. oop 요약

wooweee 2023. 3. 13. 11:10
728x90

01. 객체자향 언어

  • 핵심 개념: 캡슐화, 상속, 추상화, 다형성
  • 객체지향 언어는 기존 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 것
    1. 코드의 재사용성 높고
    2. 유지보수가 용이
    3. 중복 코드 제거

 

02. class 와 object

  1. class: object의 설계도 또는 틀, object를 생성에 사용
    1. 설계도
    2. 변수 + 메서드
    3. 사용자 정의 타입
  2. object: 실제로 존재하는 것, 서로 관련된 변수의 묶음  + 메서드(실제 메서드는 객체에 존재하지 않는다.)
  • 프로그래밍 순서: class 작성 후 class로부터 object를 생성하여 사용한다.

 

03. object 구성요소 - property(속성) 과 function(기능)

  • object: 속성 + 기능
    • 둘 중 하나만 있어도 상관없다.
  • member: object가 가지는 속성과 기능을 멤버라고 한다.
    • 속성 = variable = property = field = member 변수
    • 기능 = method
class Tv{

// variable = property = field
String color;
boolean power;

// method = function
void power () { power = !poewer; }
void channelUp () {channel++;}

}

 

04. object and instance

  • 인스턴스화: class로부터 객체를 만드는 과정
  • 인스턴스: class로부터 만들어진 객체
  • 어감차이 일뿐 같은 의미
    • 책상은 객체이다 (o)    책상은 인스턴스다(x)
    • 책상은 책상 클래스의 인스턴스이다 (o)  책상은 책상 클래스의 객체이다 (o)

 

06. 객체의 생성과 사용 

Tv t = new Tv();
class_type 변수명 = 객체생성 생성자;
  •  순서
    1. Tv t;
      • 참조변수 생성 = class 설계도를 참조하기 위한 변수
      • object memory 주소와 연결 -> 리모컨 역할 수행
      • 오직 참조변수를 통해서만 object(==instance)를 다룬다.
    2. t = new Tv();
      1. new
        • Tv class를 토대로 Tv object가 메모리의 빈 공간에 생성
        • Tv object 가 저장된 memory 주소는 참조변수 t와 동일
      2. Tv();
        • 객체 초기화

 

public class Main {
    public static void main(String[] args) {
    }

}

// class Name:  Main
// main method: public static void main(String[] args) {}
  • main method 사용 여부 - main method & new object & class 설계도 관계
    •  Tv 공장(main method)에서 설계도를 보고(class Tv)   object(new Tv()) 만든다.

 

 

07. 객체의 생성과 사용 - 객체가 여러개 일 때 

  • 참조변수 여러개가 하나의 객체의 주소와 연결이 가능하다
  • 참조변수 하나가 여러개 객체 주소와 연결은 불가능하다. -> 변수는 하나의 값만 저장이 가능하다. 
Tv t1 = new Tv(); // 0x100 주소의 객체 생성
Tv t2 = new Tv(); // 0x200 주소의 객체 생성

t2= t1 // t2의 주소를 0x200 -> 0x100으로 변경

하나의 객체에 참조변수 2개가 연결이 됨
+ first t2의 객체는 GC(garbage collector)가 제거하여 메모리 유지
  • 참고 자료
    1. class는 메모리의 어느 부분에 저장되는지
    2. class의 instance는 메모리의 어느 부분에 저장되는지
    3. instance의 참조변수는 메모리의 어느 부분에 저장되는지

Tv 클래스가 Card클래스(0xbbbb)라고 생각해서 보기

 

 

 

08. 객체배열 == 참조변수 배열

Tv[] tvArr = new Tv[3];
  1. 참조변수의 배열이 3개가 생성
  2. value는 자동초기화 값이 null
  3. array만 생성하고 new Tv[3]; 있지만 아직 instance=object는 생성안됨
  4. 참조변수와 연결할 object 생성

 

09. class의 정의(1) - data & method 결합

  • class의 정의 3가지
    1. 객체를 생성하기 위한 틀 (== 설계도)
    2. 데이터와 함수의 결합 (== 변수, 메서드)
      •  data = variable = property  /  function = method 
    3. 사용자지정 타입(== 참조형 타입): 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것

 

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

// class 영역: method 영역을 제외한 모든 부분
class 선언class {
    int iv;
    Static int cv;
    
    //method 영역
    void method(){
        System.out.print("method 영역에서는 다 들어올 수 있다.");
    }
}
  • class 영역 = main method가 없는 class의 method를 제외한 영역으로 선언문만 작성가능
    • x = y + 4;  안됨
    • System.out.print();  안됨
    • 변수 선언 & method 선언
      1. member variable - CV(class variable) / IV(instance variable) 존재
      2. method variable - LV(local variable)  존재
  • method 영역 : 선언문 포함 모든 것을 작성가능 하다
    • x = y + 4; 가능
    • System.out.print();  가능
class Name {
	// 변수 선언부
	int iv;
	Static int cv;

	// method 선언부
	void method(){
		int lv = 0;
    }
}
  • cv, iv, lv
    1. cv
      • static
      • 초기에 램에 올라가 있음 -> class 객체 생성 필요없이 사용 가능
      • 모든 instance가 공통된 저장 공간을 공유
    2. iv
      • instance 생성을 해야 존재함
      • object는 iv의 집합체
    3. lv
      • method 안에서만 존재하고 method 작업 끝날 시 사라진다.
      • params 또한 lv
      • for문 while문의 블럭 내에 선언된 지역 변수는 {} 안에서만 사용 가능하며, 블럭 벗어나면 소멸된다.

 

14. method

  • method
    • 반복 사용되는 문장들을 묶은 것
    • 하나의 기능만 수행
    • 입력값과 출력값이 있을 수도 없을 수도 있다.

 

15. method 선언부

// 반환타입 method이름(params 선언){
       int add(int x, int y)
   }
  • params
    • 너무 많을 시 : arrays || 참조변수 이용
  • 반환타입
    • return value(반환값)이 없을 시 return type은 void로 작성

 

16. method 구현부

// 리턴값은 선언문의 리턴타입과 동일해야함
int add(int x, int y){ // 리턴타입 int
   int result = x + y;
   return result; // 리턴 값
}

// void는 compiler가 자동으로 return; 넣어준다.
void method(){};
  1. method의 return 반환값 조건
    1. void 아닌 경우 반드시 return 포함
    2. return 값은 단 하나의 값만 반환 return은 해당 method를 종료하고 method를 부른 method에게 반환 값을 주는 것
    3. 반환값은 return type과 같거나 자동 형변환 가능한 것
  • 선언부의 params와 구현부의 result는 lv 이다.

 

20. return문

  • return문: 현재 실행중인 method를 종료하고 호출한 method(main method 쪽)로 돌아간다.
  • 모든 method에는 적어도 하나의 return문이 있어야 한다.

 

22. call stack

  • 호출스택: method의 작업에 필요한 메모리 공간을 제공
  • 특징: method 수행 후 사용했던 메모리 반환 후 스택에서 제거 / 하나만 실행가능

 

 

 

26, 28. static method와 instance method

 

  1. instance method
    • instance member(iv,im)와 관련된 작업 - iv를 사용, params 사용 가능
  2. static method
    • instance 생성 필요 X, classNAME.methodNAME();으로 호출  iv 사용불가 -> parameter 사용
    • static method란 객체 생성 없이 호출가능한 method이다.
      • 언제 사용하나? iv를 사용하지 않는 method일 때 사용한다.

 

30. overloading 

 

오버로딩 조건

  1. method 이름 동일
  2. parameter 개수 or type이 달라야 한다. 
  3. return type 상관없음

 

 

32. 생성자(constructor)

  • 생성자: instance가 생성될 때 호출되는 instance 초기화 method
  • 특징
    • 생성자는 리턴값이 없다. - void 생략 가능, return 값이 없기 때문
    • 모든 class 에는 반드시 1개 이상의 생성자가 정의
    • class에 생성자가 하나도 없을 시 compiler가 자동으로 기본 생성자 classname() {}; 을 추가하여 compile 한다.
    • 1개의 생성자가 정의되면 최소 조건이 충족되었으므로 compiler는 기본 생성자를 자동으로 추가하지 않는다.
    • 매개변수가 있는 생성자도 생성 가능

 

36. this()

  • 같은 class의 다른 생성자를 호출할 때 사용
  • 조건
    1. 생성자의 이름으로 class 대신 this를 사용한다
    2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 1st 줄에서만 호출 가능
  • this vs this()와 다름
    • this: instance 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다.
    • this를 사용할 수 있는 것은 인스턴스멤버뿐이다. static에는 사용불가하다.
    • iv lv 구별할 때 사용

 

38. 변수의 초기화

  1. 지역 변수
    • 수동으로 초기화
    • method는 stack에 빠르게 올라가고 내려가는데 올릴때 마다 0으로 초기화 하면 프로그램 성능일 떨어짐
  2. 인스턴스 변수
    • 자동으로 초기화
    • object, array의 내용들을 하나하나 수동으로 지정하기에 부담이 크기 때문

 

39, 40. 멤버변수의 초기화 - iv, cv

  • 초기화 복잡도 순서
    1. 자동 초기화
    2. 명시적 초기화
    3. 초기화 블럭 및 생성자
      • cv
        • static{초기화 블럭 };
      • iv
        • { 초기화 블럭}; - 거의 안씀
        • 생성자