본문 바로가기
Hello World/JAVA

JAVA - 객체지향프로그래밍 OOP 클래스 Memo. [개발스터디 기몬]

by 기몬 2023. 3. 29.
728x90
반응형

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를 오픈..  

728x90
반응형

댓글