Memo about ..
oop 객체지향프로그래밍
클래스 : (객체설계도 Object)
클래스는 객체를 설계하기 위한 설계도..
인스턴스 .
객체를 설계화하면 인스턴스가 만들어진다.
클래스는 객체
인스턴스 객체
클래스는 = 인스턴스
인스턴스 != 클래스
객체의 상호작용 - 객체의 동작을 호출하면 이루어지고
결과값이 리턴되면서 상호작용을 한다.
객체는 상호작용 뿐아니라 그 자체로서 관계를 맺는다
부모과 자식 객체 [상속관계]
사람과 사물의 [사용관계]
각 객체간의 [집합관계]
객체지향프로그래밍의 특징
Encapsulation --- > 속성(데이터), 동작(알고리즘)
: 클래스 안에 서로 연관있는 속성과 기능들을 하나의
캡슐로 만들어 데이터를 외부로부터 보호하는 것.
클래스를 인스턴스화하면 인스턴스(객체)가 만들어진다.
클래스로부터 객체를 만드는 과정을 인스턴스화라고 함.
클래스 선언
접근제한자
Access Modifier : public / private / protected
소스파일당 public class 는 하나만 온다
나머지 class 는 public 일 수 없다.
클래스는 type / type은 변수를 생성할 수 있다.
클래스로부터 객체를 생성하려면 객체 생성 연산자인 new가 필요 .
new 연산자는 객체를 생성시키고 객체의 주소를 리턴
클래스변수 = new 클래스 ();
같은 타입이 아닌 다른 타입의 인스턴스(값) 를 저장할 수 없음..
클래스의 구성 멤버
클래스 = 필드, 메소드, 생성자
==================
필드 - 객체의 속성.
메소드 - 객체의 동작.
생성자 - 객체의 초기화. >>>> Random r = new Random(); // 객체 생성 초기화
: 한번만 초기화 함. 이 객체를 생성 초기화하는 것을 constructor
필드(속성)를 초기화함.
클래스 이름과 동일해야한다.
Class name () {
Random r = new Random();
}
필드 선언 *****
1. 필드를 선언할 때 초기값 선언
2. 생성자에서 초기값 선언
필드변수와 로컬변수는 선언 문법은 같지만
자동초기화의 유무가 다르다
생성 시점이 다르고 저장되는 위치,
메모리가 소멸되는 시점이 다르다.
필드는 클래스를 인스턴스화 할 때 heap에 생성 된다.
로컬변수 함수를 콜할 때 만들어진다.
문법적 기술은 동일하다.
필드 - heap에 만들어진다. / new 객체 초기화시 생성 / 객체가 회수 될 때 필드가 사라진다/ 자동초기화
로컬변수 - Stack에 만들어진다. / 함수를 call 할 때 생성 / 메소드(함수) 종료될 때 사라진다/ 초기화 되지 않는다.
객체는 언제 사라지나? : 필드는 new 객체 생성 초기화시에 생성되는데 필드가 더 이상
사용되지 않고 고아객체가 될 시에 사라진다. Gabage collector 가 회수..
언제 고아객체가 되나? 참조를 잃게 되면 .
로컬변수와 필드의 구별을 해야함. ***** 중요.
필드 사용
필드값을 읽고 변경하는 것.
클래스로부터 객체가 생성된 후에 필드를 사용할 수 있음.
필드는 객체 내부의 생성자와 메소드 내부에서 사용할 수 있고,
객체 외부에서도 접근해서 사용할 수 있음.
외부객체 . 도트연산자 사용.
객체내부에서 로컬변수와 필드의 네임이 같을 땐
필드에 this. 을 사용해서 구별해준다.
생성자는 반드시 하나는 존재함.
[public] 클래스() { } // defualt 생성자
개발자가 기본 생성자를 하나도 만들지 않으면
컴파일러가 자동으로 기본생성자를 생성한다.
생성자 오버로딩 오버로딩은 메소드와 생성자에 적용된다
같은 이름의 생성자와 메소드를 여러게 정의하는 것 = 오버로딩.
매개변수를 달리하는 생성자를 여러 개 선언하는 것
*********오버로딩
오버로딩 규칙 ( 갯수, 타입, 순서)
1. 매개변수의 갯수가 다르거나
2. 매개변수의 타입이 다르거나
3. 매개변수의 순서가 다르거나
F3 을 눌려서 각 override 확인가능. ...
what is overloading : 같은 클래스 안에 같은 이름의 메서드를 여러 개 정의 가능한 것.
필드와 오버로딩 *****
필드는 오버로딩 할 수 없다.
코드 중복을 해소하기 위해서 다른 생성자를 호출한다. this(..) 를 사용.
코드가 중복되는 것은 비효율과 오류를 많이 생성하기 때문에
중복을 피하고 최소화해야한다.
메소드는 생성자와는 달리 [리턴]이 존재한다.
메소드는 리턴 타입을 생략할 수 없다 void라도 써줘야 함.
리턴은 변수를 호출 한 쪽으로 값을 되돌리고자 할 때 사용.
static
스테틱 멤버(정적)와 인스턴스
로컬 변수는 stack / 필드는 heap에 만들어짐.
static은 new와 아무 연관 관계가 없고 한번만 만들어짐. (공유변수, 전역변수 처럼 사용)
변수 3가지
로컬변수 / 필드의 인스턴스필드와 정적 멤버 구분이 가능해야함
필드는 두 가지 : 인스턴스 필드/ 정적 필드
자바의 패키지는 디렉토리 개념과 유사하다 / 폴더로 분리하고 안에 파일들이 저장되는 것 처럼..
패키지는 프로그램의 충돌 또는 오류를 사전에 방지한다.
패키지에 소속되어 있으면 패키지의 풀네임으로 실행시켜야 한다.
oop 에서 필드(속성) private으로 권장.
대신 setter와 getter를 오픈..
'Hello World > JAVA' 카테고리의 다른 글
JAVA - 예외처리 EXCEPTION 2 - Exception / Runtime Exception [개발스터디 기몬] (0) | 2023.04.12 |
---|---|
JAVA - 예외처리 EXCEPTION - Exception / Runtime Exception [개발스터디 기몬] (0) | 2023.04.10 |
JAVA - 객체지향 프로그래밍 / oop 필드, 생성자, 클래스 / 오버로딩 인스턴스 멤버, 정적 멤버 [개발스터디 기몬] (0) | 2023.03.27 |
JAVA - 객체 지향 프로그래밍 / 클래스 - 생성자 , 필드, 메소드 / 인스턴스 [개발스터디 기몬] (0) | 2023.03.23 |
JAVA - 배열 Array [개발스터디 기몬] (0) | 2023.03.10 |
댓글