객체 지향 언어

하루·2024년 9월 30일

객체 지향 언어..

특징

-- 캡슐화

  1. 데이터와 메서드를 하나의 단위인 객체로 묶고, 외부에서 객체의 내부 상태를 직접 접근하지 못하도록 보호.

-- 상속

  1. 기존의 클래스(부모 클래스)를 기반으로 새로운 클래스(자식 클래스)를 만들 수 있는 기능 자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 재사용할 수 있다.

-- 추상화

  1. 복잡한 시스템을 단순화하여 핵심적인 부분만을 드러내는 과정입니다. 추상 클래스나 인터페이스를 통해 구현.

-- 다형성

  1. 동일한 이름의 메서드가 여러 클래스에서 다르게 동작할 수 있는 능력.
    오버로딩(메서드 이름 중복)과 오버라이딩(부모 클래스 메서드 재정의)

장점

  • 재사용성이 높다.
  • 코드 관리가 용이하다.
  • 신회성이 높은 프로그래밍을 가능하게한다.

호출스택

  • 메서드 수행에 필요한 메모리가 제공되는 공간
  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해체

매개 변수

  • 기본형 매개변수 - 변수의 값을 읽기만 할 수 있다. ( read_only )
  • 참조형 매개변수 - 변수의 값을 읽고 변경 할 수 있다. ( read&write )
    -> 객체의 주소값을 반환

Static메서드 , 인스턴스 메서드 구분

  • 메서드 앞에 static이 붙으면 static 메서드
  • 메서드 앞에 static이 붙지 않으면 인스턴스 메서드

인스턴스 메서드

  • 인스턴스 생성후 '참조변수, 메서드이름()'으로 호출
  • 인스턴스 멤버 ( iv , im )와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수 ( iv ) 사용가능

static 메서드 ( 클래스메서드 )

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

메서드간 호출과 참조

class TestClass2{
int iv;
static int cv ;
void instanceMethod(){
    System.out.println(iv);  // 가능 인스턴스 메서드 ( 객체 생성후 호출 가능 ) -> 객체를 생성후 호출 하기 때문에 가능
    System.out.println(cv);  // 가능
};
static  void staticMethod(){
    System.out.println(iv);  // 오류 : static 메서드 ( 객체 생성없이 호출 가능 ) iv는 인스턴스 객체가 있는경우 호출가능
    System.out.println(cv);  // 가능
	}
}
static 메서드 -> 인스턴스메서드 : 호출 불가능
static 메서드 <- 인스턴스메서드 : 호출 가능
static 메서드 <-> static 메서드 : 서로 호출가능
static 메서드는 인스턴스 변수를 사용불가
왜 static 메서드는 인스턴스 멤버 ( iv , im )를 쓸수 없나.
-> static 메서드 호출 시 객체( iv묶음 ) 가 없을 수도 있어서 불가능하다.

오버로딩

정의 : 한 클래스 안에 같은 이름의 메서드 여러개를 정의하는 것

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

int add( int a, int b ) { return a + b; }
int add( int x , int y ) { return x + y; }
-> 오버 로딩 X
error : add ( int , int ) is aleady defined 이미정의 되어있다. (타입이동일하다.)

int add ( int a, int b ) { return a + b; }
long add ( int a, int b ) {return ( long ) a + b; }
-> 오버 로딩 X
error 2번조건 : 반환타입만 바뀌었지 타입이 다르지 않다.

long add ( int a, long b ) { return a + b; }
long add ( long a , int b ) { return a + b; }
-> 오버로딩 O
단 add ( 3, 3 ) 인경우 컴퓨터가 판단을 내릴수 없어 에러가 나올수 있다.
error ambiguous에러 ( 모호하다 )


생성자 - ( iv 초기화 메서드 )

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

Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;

-> Time t = new Time( 12, 34, 56 );

-- 이름이 클래스 이름과 같아야한다.

클래스 이름.( 타입변수명, 타입변수명, ... ) {
// 인스턴스 생성시 수행될 코드,
// 주로 인스턴스 변수의 초기화 코드를적는다.
}

class Card <-(클래스이름) {
...
Card() <-생성자 { // 매개변수 없는 생성자
// 인스턴스 초기화 작업
}
Card <- 생성자 (String kind, int number) { // 매개변수 있는 생성자
// 인스턴스 초기화 작업
}


추가
-- 프로그램 = 명령어 + data
ex ) ADD( 명령어 ) = ( 5 , 3 )( data )
-- 객체 = 변수의 묶음 ( data )

JVM

  1. method area
    cv 클래스 데이터
  2. call stack
    자동변수 ( lv )
  3. Heap
    인스턴스 ( iv )

1 == 최상단
3 == 최하단


0개의 댓글