객체지향언어

dodin·2025년 8월 8일

kosta

목록 보기
1/1

객체지향언어

재사용성, 유지보수, 중복 제거

파라미터 argument 매개변수 인자

클래스

  • 객체를 생성하면, 메모리에 객체가 생성
  • 설계도
  • 객체를 정의해 놓은 것
  • 데이터와 함수의 결합(구조체+함수)
  • 사용자 정의 타입

변수 : 하나의 데이터를 저장할 수 있는 공간
배열 : 같은 타입의 여러 데이터를 저장할 수 있는 공간
구조체 : 타입 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간


객체(Object)

: 일반적인 의미
속성(변수), 기능(메소드)의 집합 = 객체의 멤버


인스턴스(instance)

: 특정 클래스의 객체 강조
"클래스의 객체다" 보다는 "클래스의 인스턴스다" 가 자연스럽다.

  • 클래스명 참조변수명 = new 클래스명();
  • 인스턴스 타입의 참조변수를 선언, (stack 주소저장)
    new 연산자를 이용해 객체 생성 후, (heap 객체생성)
    new 연산자가 반환하는 생성된 객체의 주소가 참조변수에 저장
    • 인스턴스 속성(변수)에 접근 : 참조변수.속성
    • 인스턴스 기능(메소드) 호출 : 참조변수.메소드

new 연산자

인스턴스를 생성할 클래스를 읽어, 인스턴스 생성에 필요한 메모리 계산, 메모리의 빈 공간을 찾아 객체 생성


변수

클래스 영역

  • 클래스변수 : 클래스가 메모리에 올라갈 때(클래스 로딩~프로그램 종료)
    • 모든 인스턴스가 하나의 저장공간을 공유->공통된 값
    • 인스턴스 변수 사용/메소드 호출 불가능
    • static
  • 인스턴스변수 : 인스턴스 생성 시(가비지 컬렉터)
    • 인스턴스마다 다른 값
    • 참조변수

메소드 영역(method area)

  • 지역변수 : 메소드 종료 시 소멸

메소드

클래스 영역에서만 정의
-선언부
-구현부

return문

현재 실행 중인 메소드 종료 후 호출한 곳으로 돌아감

호출

  • 참조변수.메소드이름()
    • 클래스의 인스턴스를 생성한 후, 참조변수를 통해 메소드 호출
  • 참조변수.메소드이름(매개변수)
    • 호출할 때 입력한 값은 매개변수에 복사되고, 이 값들을 이용해 작업 후, (return) 호출한 곳으로 결과값을 반환하여 저장

인스턴스 메소드

  • 참조변수.메소드이름() 호출
    • 메소드 내에서 인스턴스 변수 사용 가능
  • 클래스메소드 (static 메소드)
    • 객체생성X 클래스이름.메소드이름() 호출
    • 인스턴스 변수 사용X

JVM 메모리구조

메소드 영역(method area)

  • 클래스 정보와 클래스 변수가 저장되는 곳

호출 스택(Call Stack)

지역변수가 만들어지는 곳
메소드 작업공간
메소드 호출되면 메모리공간 할당받고, 종료되면 메모리 반환

-기본형 매개변수

힙(Heap)

인스턴스가 생성되는 곳
new 연산자에 의해 생성되는 배열, 객체


오버로딩(method overloading)

: 하나의 클래스에 같은 이름의 메소드를 여러개 정의
1. 메소드 이름 일치
2. 매개변수 개수/타입 불일치
3. 매개변수 일치, 리턴타입만 다른 경우 불가능

생성자

: 인스턴스가 생성될 때마다 호출되는 인스턴스 "초기화" 메소드
인스턴스 변수 초기화 / 생성 시 수행할 작업

Card c = new Card();
  • new 연산자에 의해 heap에 Card 클래스의 인스턴스 생성
  • 생성자 Card() 호출 수행
  • new 연산자 결과 - 생성된 Card 인스턴스 주소 반환, 참조변수 c에 저장

    반드시 하나 이상의 생성자 존재
    생성자 이름 = 클래스 이름
    리턴값 X

기본 생성자

매개변수 있는 생성자

this

this.

: 참조변수 (인스턴스 자기 자신 = 인스턴스 주소 저장)
단, main메소드/static 메소드 사용 불가

this(...) : 생성자

: 생성자에서 다른 생성자 호출 (첫문장 사용)

Car() { this.("white",4) } // 첫 문장 사용
Car(String color, int door) { this.color=color; this.door=door;}
Car(Car c) { color = c.color; door=c.door; } // 인스턴스 복사
  • 생성자에서 참조변수를 매개변수로 받아 인스턴스변수들의 값 복사
  • 똑같은 속성값을 갖는 독립적인 인스턴스 추가

다형성

참조변수의 형 변환

  • 컴파일 시점 : 변수타입을 보고 메소드 호출이 가능한지?
    • 여기서 속성값은 타입을 따라감 (정적바인딩)
  • 실행 시점 : 실제 객체타입을 보고 메소드 실행
    • 메소드 (정적바인딩)

UpCasting

Student s = new Student(); // Student타입 참조변수 s에 Student객체 생성
Parent p = s; // 그 참조변수 s를 Parent타입 변수에 대입

Parent p = new Student(); // 부모타입 자식객체

DownCasting

Parent p = new Child(); // 부모타입 자식객체
Child c = (Child)p; // 자식타입 자식객체로 다운캐스팅
profile
hello

0개의 댓글