- 시작하게 된 계기 및 다짐 😮
이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프
에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.
- 학습 목표 😮
목표 | 결과 |
---|---|
클래스와 객체의 이해 및 활용 | O |
필드와 메서드 이해 | O |
메서드의 오버로딩 | O |
static 키워드 이해 | O |
- 정리
1. Class(Method) 영역 : 클래스(static 변수),인터페이스,메소드,필드,전역변수 바이트 코드 보관 (모든 쓰레드가 공유)
2. Heap 영역 : new키워드로 생성된 객체,배열이 생성되는 영역
메소드 영역에 로드된 클래스만 생성 가능 (모든 쓰레드가 공유)
3. Stack 영역 : 메서드 호출 시마다 각 메서드만의 공간, 매개변수,지역변수,리턴 값, 임시값등 (메서드가 종료시 제거)
4. PC Register : 쓰레드마다 존재, 쓰레드 별 명령 실행하는 명령 주소값
5. Native method stack : 자바외 언어로 작성된 네이티브 코드를 위한 영역
# 객체(Object) : 사물을 상태/행위/속성/기능 등을 독립적인 하나의 레고조각 처럼 만드는 것 (ex. 클래스 name = new 클래스(); )
# 인스턴스화 : 클래스를 통해 생성된 객체(데이터가 들어간) (객체와 거의 같은 개념, 작은개념
ex) 클래스 변수명; -> 인스턴스화 -> 클래스 변수명 = new 클래스 ;
# 클래스(Class) : 객체를 만드는 프레임/설계도 로써, 코드로 정의해 놓은 것
# 멤버 : 클래스의 기능 + 속성(변수,메소드)
객체의 생성
1. Class name_; --- > name_ = new 생성자();
2. Class name = new 생성자();
객체의 사용
1. name_.필드
2. name_.메서드();
# 정적 중첩클래스 (static 클래스)
- 클래스 내부에 static 클래스 키워드가 붙으며 생성된 Class
==> outer클래스의 객체가 없어도 inner 클래스 객체 생성 가능(Outer.Inner 객체 = new Outer.Inner();)
# 내부클래스(비 정적, static 없는)
- Outer는 Inner클래스를 멤버 변수처럼 사용가능, new로 인스턴스를 만들어야함
==> 내부클래스는 Outer클래스의 자원을 직접 사용가능
★★ static 변수 or static 메소드를 가질 수 없다.
- 로컬클래스
★메소드 내에서만 사용되는 클래스
==> Outer메소드 내에 클래스가 있는 것 static final은 가능
==> final을 붙이지 않아도 그 특성을 가짐, 필드에
==> 메소드에서 지역변수를 final로 선언함으로써, 로컬클래스에서 참조 가능
==> 메소드가 사라져도 지역클래스 객체는 계속 존재
# 익명클래스
- Outer클래스의 내부에 선언되며, 딱 한번 사용하려고 할 때 선언한다.
==> 부모클래스 p = new 부모클래스(){};
==> Test t1 = new Test(){
지역변수,메소드등...
}
# 추상클래스
- abstract 메소드를 멤버로 가지고 있는 클래스, 상속을 위한 일종의 설계도같은 역할,
==> new를 통해 객체를 직접 생성할 수 없다.
# 인터페이스
- 추상메소드와 상수만을 멤버로 가지는 것, 일종의 기본설계도다(좀 더 추상적)
==> 모든 멤버 변수는 public static final이며(생략가능), 모든 메소드는 public abstract이다(생략가능)
==> public class pigeon extedns 추상클래스 implements 인터페이스{
}
★ 추상클래스 vs 인터페이스
- 추상 클래스는 단 하나 상속이 가능하며, 인터페이스는 여러 인터페이스를 함께 사용할 수 있다
- 추상 클래스는 객체의 공통된 틀 같은거(~이다), 인터페이스는 객체의 특정 행동의 틀(~할 수 있는)
ex) 추상 : animal , 인터페이스 : flyable, talk
# 메서드 : 일종의 함수_기능 (ex. void calnum();)
- 오버로드 : 같은 메서드를 2개이상 인자를 다르게 생성
# 필드 : 멤버변수라고도 불리며, 일종의 전역변수 역할
- public : 모든 클래스로 부터 접근가능, private : 클래스 내부에서만 접근 가능
변수
1. 클래스 변수 : static 으로 선언 , 공유변수(모든 클래스에서 값 사용가능)
==> 클래스의 고유한 특성, 클래스 내 공유
2. 인스턴스 변수 : 클래스 내 선언된 변수, 생성자를 통해 자동생성(생성자 내 , 초기화 필요 x)
==> 각 생성자 의 특징, 특성
3. 지역변수 : 메서드에 선언된 변수 (초기화 필요)
==> 메서드의 생성과 소멸시기에 같이 존재 및 사라짐
★★ Static 키워드
- 별도의 객체 생성 없이 Class.멤버명 : 으로 생성 가능(자동적으로 Heap 메모리에 할당)
- ex) Class.필드
- static 메서드안에서는 객체를 생성 할 필요가 없기때문에, static 객체만을 사용할 수 있다.
메서드(함수)
- 클래스 내 일종의 함수 (_객체의 기능 )
- ex) public static int add(int x, int,y) 선언
★ 클래스 내부에서 메서드 호출을 객체 생성없이 가능하지만, 외부에서는 객체 생성 후 사용가능
메서드_오버로드
- 하나의 클래스에 같은 이름의 여러 메소드 정의(매개변수(인자)를 다르게 정의하는 형식으로 구분)
ex) void Shout();
void Shout(String animal);
void SHout(String animal, int age);
- 피드백 😮
자바의 가장 핵심요소인 객체지향(OOP)를 공부하였는데 기존에 Main안에 모든 변수와 메서드를 정의하는 것이 아닌 추상화를 시켜가며 만들고자 하는 객체들의 공통된 점을 Class로 묶어서 이를 이용해 각 객체를 만드는 형식이다.
막상 실제로 만들고자 하는 객체를 추상화시켜가며 공통된 점만을 뽑아서 클래스로 만드는게 쉽지 많은 않았다.
내일은 생성자에 대하여 배우는데 간단히 살펴보니, 클래스의 객체를 생성할 때 멤버변수들을 초기화시켜주는 역할을 하고 매개변수를 받아 생성과 동시에 변수에 값을 줄 수 있는 것 같다.
OOP가 자바의 핵심요소 중 하나이기에, 꾸준히 공부를 하며 내 것으로 만들어야 겠다.
- 앞으로 해야 될 것 😮