객체 지향의 특성
-
상속
- 부모의 속성이 자식에게 그대로 100% 물려진다는 특성.
- is - a 관계가 성립하는지 확인해 봄으로써 상속 관계인지 아닌지 확인 가능
- 주의할 것은 부모가 자식의 특성을 다 가지느냐는 보장할 수 없다는 것. 자식에서 부모에게 상속 받은 것 외에 다른 기능을 추가하거나 부모에게서 받은 메소드를 변형할 수도 있기 때문에.
- 중요!! 클래스는 다중 상속이 안된다. 즉 부모가 둘 이상일 수 없고, 오로지 하나의 부모만 가질 수 있다. 이는 자바의 인터페이스와 다른 점이다.
-
다형성
-
같은 이름의 메소드가!! 클래스나 객체 따라 다르게 동작하도록 구현하는 것.
-
다형성의 예시로는,
- 오버로딩 = 식별자 메소드처럼 함수명은 같은데, 매개 변수 개수나 타입이 달라서 구별되는, 즉 이름은 같지만 다르게 동작하는 메소드
- 오버라이딩 = 하나의 부모 클래스에서 파생된 여러 자식 클래스들이 부모로부터 받은 함수를 각자 다르게 구현하는 것 .
이 있다.
-
절차 지향과의 비교
- 절차 지향은 작업 순서를 기준으로 표현.
- 객체 지향은 상호작용을 중심으로 표현.
-
클래스의 구성

클래스는 접근 권한자, 클래스 선언 명령어와 클래스 이름 이렇게 세 가지를 통해 선언이 되고,
클래스 구성은 크게 변수를 뜻하는 필드 부분과, 함수를 뜻하는 메소드 부분으로 나눌 수 있다.

- 생성자는, 클래스의 이름과 같은 이름을 가진 특별한 메소드를 칭한다. 객체가 생성될 때 컴파일러에 의하여 자동적으로 무조건 한 번이상 호출된다는 것이 특징이다. 개발자는 이를 이용하여 객체를 초기화하는데 필요한 코드를 작성할 수 있다.

객체는 생성될 때 new 키워드를 통해서만 생성될 수 있다. 객체가 생성이 될 때는 1. 먼저 객체를 담을 레퍼런스 변수가 선언되어야 하고, 2. 객체를 new 라는 키워드를 통해 생성한 다음, (이때 메모리에는 클래스의 타입 크기에 따른 메모리가 할당된다. 또 자동으로 생성자 코드가 실행된다.)

주의할 점은, 레퍼런스 변수를 선언할 때는 클래스가 메모리에 할당되지 않고 있다가, new 라는 생성자를 사용했을 때에만 메모리에 할당된다는 점이다.
- 생성자를 통해 객체가 메모리에 할당된 뒤에는, 객체 멤버 접근자를 이용해서 객체 멤버에 접근이 가능하다.
- 아까 위에서, 생성자는 자동으로 컴파일러가 객체 생성과 동시에 호출한다고 햇다. 따라서 기본 생성자를 쓰기를 희망하는 경우, 이를 굳이 클래스의 메소드 영역에 쓸 필요는 없다. 단, 만약 이미 사용자가 기본 생성자가 아닌 다른 생성자를 입력해 놓은 상태라면, 컴파일러가 기본 생성자를 불러오지는 않는다.
- 생성자의 특징
- 생성자는 초기화를 위한 함수이다.
- 생성자는 리턴 타입이 없다.
- 생성자는 오버로딩이 가능하므로, 여러 개를 작성할 수 있다. 단 매개변수의 (개수, 타입, 타입의 순서 )중 하나 이상이 서로 달라야 한다.
- 생성자는 new 를 통해 객체를 생성할 때, 객체당 한 번만 호출된다!
- this 레퍼런스에는 세 가지 종류가 있다.
-
this 용법 ? 잘 모르겠는..
-
this. 멤버 용법
- 객체의 멤버 변수와 메소드의 매개변수 이름이 서로 같은 경우, 무엇을 뜻하는지 명확히 하기 위해 사용한다.

-
this() 용법
- 생성자 안에서만 사용이 가능한 코드로, 생성자의 제일 처음에 수행되어야 한다. 이는 클래스 내의 다른 생성자를 생성자 안에서 호출하고 싶을 때 사용한다.

- 객체의 치환 → 객체의 경우, 객체 자체가 복사되는 것이 아니라 레퍼런스 즉 주소가 복사되기 때문에, 복사된 값을 변경할 경우 객체 자체가 변경된다. 조심!!
- 객체 배열

객체 배열의 경우, 클래스 이름을 먼저 써 주고, 그 클래스를 담을 배열명을 배열을 나타내는 []와 함께 써줌으로써 선언할 수 있다. 그리고 해당 레퍼런스 변수에 new 생성자를 이용하여, 몇 개의 객체를 담을 것인지를 정하고 생성해 주면 된다.
- 참고로, 같은 자바 프로젝트 안에 같은 클래스 이름이 있는 경우, 에러가 날 수 있으므로, 새로운 자바 프로젝트를 만들어야 한다.
- 메소드의 경우 반드시! 클래스 안에 있어야 한다. 캡슐화 원칙에 따라. 메소드는 접근 지정자와 리턴 타입으로 구성되어 있다.

-
자바의 인자 전달 방식에는 두 가지가 있음.
- call by value
- 값 자체를 전달
- call by reference
- 메모리 주소를 전달
- 배열의 경우도 레퍼런스 전달임. 배열 명이 첫 번째 주소.
-
메소드 오버로딩
- 메소드 오버롣ㅇ은 매개 변수의 개수나 타입 또는 타입의 순서가 서로 달라야 함.
- 근본적으로는 같은 일을 한다. 매개변수만 다른 것이니
-
객체 소멸
- new 로 할당된 메모리를 자바 가상 기계로 다시 돌려주는 행위.
- 자바 가상 기계의 가비지 컬렉터가 주기적으로 쓰레기값을 가져간다. jvm
- 가비지는 예를 들어, 자신을 가리키던 레퍼런스 변수가 다른 것을 가리킴으로써 자신을 가리켜 줄 수 있는 변수가 없을 때 생긴다.

- 개발자가 System.gc() 를 이용해 가비지 컬렉션을 자동 요청할 수도 있지만, jvm 에게 결정권이 있다.
- 자바의 패키지란, 서로 관련성 있는 클래스들끼리 모아둔 디렉터리이다.
- 접근 지정자

자바의 접근 지정자는 4가지가 있다. private < default < protected < public
private 은 자기 클래스 내에서만 쓸 수 있는.. 외부로 부터 완벽히 차단시키는 것이고
default 는 동일 패키지 내에서
protected 는 동일 패키지 + 자식 클래스 허용
public 은 완전 오픈이다.
- 클래스의 접근 지정자는 두 개이다.
- default ← 같은 패키지의 클래스에서만 접근 가능. (생략함 주로. )
- public ← 모든 클래스에서 허용 가능
- 멤버 접근 지정은 위 4가지이다. (변수)