1. 시작하게 된 계기 및 다짐 😮
  • 이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.

    • 그 날 배웠던 것을 길지 않아도 좋으니 정리하며 복습하는 습관 기르기
    • 주말에 다음주에 배울 내용들을 예습
    • 코딩 문제와 java코드들은 꾸준히 학습
  1. 학습 목표 😮
목표결과
클래스와 객체의 이해 및 활용O
필드와 메서드 이해O
메서드의 오버로딩O
static 키워드 이해O
  1. 정리

Java_메모리 영역


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);
      






  1. 피드백 😮
  • 자바의 가장 핵심요소인 객체지향(OOP)를 공부하였는데 기존에 Main안에 모든 변수와 메서드를 정의하는 것이 아닌 추상화를 시켜가며 만들고자 하는 객체들의 공통된 점을 Class로 묶어서 이를 이용해 각 객체를 만드는 형식이다.
    막상 실제로 만들고자 하는 객체를 추상화시켜가며 공통된 점만을 뽑아서 클래스로 만드는게 쉽지 많은 않았다.

  • 내일은 생성자에 대하여 배우는데 간단히 살펴보니, 클래스의 객체를 생성할 때 멤버변수들을 초기화시켜주는 역할을 하고 매개변수를 받아 생성과 동시에 변수에 값을 줄 수 있는 것 같다.

  • OOP가 자바의 핵심요소 중 하나이기에, 꾸준히 공부를 하며 내 것으로 만들어야 겠다.

  1. 앞으로 해야 될 것 😮
  • 매일 꾸준히 할 것
    • 꾸준히 velog 작성
    • Java 언어 및 Algorithm 공부(Coding-Test)
    • 틈틈히 운동 하기

  • 내일 해야 할 것
    • 생성자 및 블로깅
    • 오늘 내일 배웠던 것들에 대한 심화 학습 (OOP)
profile
Will be great Backend-developer

0개의 댓글