그냥 배우는 언어 기록하는 공간 :D

패캠 학습일지

[패스트캠퍼스] 자바 강의 4주차 학습일지

꾸준히_노력하기 2023. 12. 5. 16:57
배운 내용 정리

 

[ Part 3. 객체지향 프로그래밍 시작하기 ]

ch 03. 객체를 접근하는 권한 이해하기

 

> 객체 보호

: 객체에서 중요한 상태정보는 접근제어가 필요함(정보은닉).

: 객체의 행위정보는 상호작용을 위해 접근 허용.

 


> 접근 제어 실습

 

 

※ 접근을 허용할 시 잘못된 정보가 저장될 수 있음. 

※ 상태정보는 접근제어가 필요하다는 것을 보여주는 예시.

 


> 객체 간 접근제어 방법

: 상황에 맞는 접근제한자 사용.

: 클래스 설계시 고려해야 함.

 


 

> 접근제한자 (Access Modifier) 

: 멤버변수나 멤버메서드 앞에 사용.

: public, private, protected, default

 

> public

: 모든 패키지에서 접근 가능.

 

> private

: 모든 패키지에서 접근 불가능.

 

> protected

: 상속관계인 경우 하위클래스에서 상위클래스로 접근 가능.

 

> default

: 동일한 패키지에서만 접근 가능.

 

 


> 접근제한자 실습

 

 

 

 


> 패키지 (package)

: 서로 기능이 비슷한 클래스들끼리 모아놓은 것.

: 클래스를 쉽게 관리하기 위해서 사용함.

: 패기지 외부에서 클래스에 접근할 수 없도록 하기 위해 사용함.

: 자바에서 제공되는 API도 패키지의 형태로 배포됨.

: 윈도우의 폴더와 비슷한 개념이지만, 보안 기능이 있다는 점에서 다름.

 


 

> 자바에서 제공되는 대표 패키지

  • java.lang : 자주 사용하는 클래스 (ex. String, System)
  • jvava.io : 입출력 관련 클래스 (ex. inputStream)
  • java.util : 도움을 주는 클래스 (ex. Scanner)
  • java.net : 네트워킹 관련 클래스 (IP주소, URL, 소켓 등과 관련된 것)
  • java.sql : 데이터베이스 관련 클래스, SQL
  • java.math : 수학 관련 클래스

 


> 클래스에 접근하는 방법

: 클래스가 만들어진 위치와 접근제어를 알아야 함.

: 클래스의 전체 이름(class full-name, 패키지 포함 클래스)으로 접근하는 방법.

: import를 사용하여 접근하는 방법. (java.lang 패키지는 생략 가능)

 


> 클래스 이름 실습

 

 


ch 04. 잘 설계된 VO 클래스(객체)

 

> 정보은닉 (information hiding)

: 다른 객체에게 자신의 정보를 숨기고

  자신의 동작, 기능, 연산만을 통해 접근을 허용하는 것.

: 클래스 외부에서 특정 정보에 접근하는 것을 막는 것.

: 객체의 상태정보는 일반적으로 접근제한자를 private으로 설계함.

 


> 정보은닉 실습

 

 

 


 

 

 


 

> 객체지향 프로그래밍


: 프로그램의 기본인 연산자, 조건문, 반복문, 제어문 등을 이용해서 논리적인 사고를 하는 것도 프로그램이지만, 궁극적으로 객체지향에서 다루는 건 객체 데이터.

 

: 객체 데이터를 다루기 위해서 클래스로 객체를 모델링하고, 모델링된 객체를 생성해서 데이터를 저장한 다음, 객체를 데이터베이스에 insert, update, select, delete 해서 API 시스템으로 만드는 것이기 때문에 클래스를 잘 다뤄야 함.

 


> 정보은닉된 정보에 접근하는 방법

① setter, getter 메서드를 통해 접근

 

 

 


 

> setter 메서드

: 값을 저장하는 메서드.

: set + 멤버변수의 첫 영문을 대문자로 설계함.

 

 


 

> getter 메서드

: 값을 얻어오는 메서드.

: get + 멤버변수의 첫 영문을 대문자로 설계함.

 

 


> setter, getter로 접근하기 실습

 

 

 


> 정보은닉된 정보에 접근하는 방법

② 생성자 메서드를 통해 접근 (객체 초기화)

 

 


 

 


> 생성자 메서드로 접근하기 실습

 

 

 


 

※ 객체생성시 생성자 메서드를 오버로딩해서 원하는 값으로 초기화하는 것이 가능함.

 


> 생성자 메서드 오버로딩 실습

 

 

 


 

 

 


 

 

 


> toString( ) 메서드

: 객체가 보유한 값 전체를 문자열 형태로 넘겨주기 위해서 만드는 메서드.

 


> toString( ) 메서드 실습

 

 

 


> 잘 설계된 VO 클래스

 

  1. 모든 상태정보 정보은닉하기 (private)
  2. default 생성자 만들기
  3. 생성자 메서드를 오버로딩해서 객체 초기화하기
  4. setter 메서드 만들기 (값 저장)
  5. getter 메서드 만들기 (값 얻기)
  6. toString( ) 메서드 만들기 (객체가 보유한 전체 값 출력) 

※ default 생성자 : 일반적으로 만들지 않지만, 사용 여부와 관계없이 반드시 만드는 습관을 들이는 것이 좋음.

 


> 잘 설계된 VO 클래스 실습

 

 

 


 

 


ch 05. 배열과 클래스의 관계

 

 


 

> 배열 생성

int[ ] arr=new int[6];

 

 


 

> 객체 생성

Student std=new Student( );

 

 


> 배열과 클래스의 관계 실습

 

 

 


 

 


> 기본배열

: float[ ] arr=new float[4];

: 기본 자료형의 데이터를 저장하는 배열.

: 실제로 존재하는 용어는 아님.

 

> 객체배열

: Student[ ] std=new Student[4];

: 기억공간에 들어가는 데이터가 객체인 배열.

: 즉, 객체를 저장하는 배열.

 


> 기본배열과 객체배열의 관계 실습

 

 

 

 

 

 


ch 06. static과 JVM 메모리 모델 이해하기

 

 

> static과 메모리의 관계

 

 

 

 

 


 

 

> Call Stack Frame Area

: 메서드가 호출되면 호출된 기계어 코드가 push되고 실행되는 메모리공간.

: 현재 프로그램이 실행되고 있는 상태를 파악 가능.

 

> PC (Program Counter)

: 현재 수행 중인 프로그램의 위치.

 


> static과 none-static 멤버들의 접근 방법

 

 


 

① none-static 메서드 접근

: 객체를 생성해서 접근.

 

 

 


 

 

 


② static 메서드 접근

: 클래스이름.호출메서드

 

 

 


 

 

 


> none-static 메서드 실습

 

 

 


 

 


> JVM의 Memory model (Runtime Data Area)

 

> Method Area

: 메서드의 기계어 코드가 할당되는 공간.

: static-zone과 none-static-zoned으로 나누어짐.

: static 멤버들은 static-zone에 할당됨.

 


 

> Heap Area | Generation

: 객체가 생성되는 메모리 공간.

: GC에 의해서 메모리가 수집됨.

 

 

 

 


 

> Stack Area (Call Stack Frame Area)

: 메서드가 호출되면 기계어 코드를 할당 받고, 메서드가 실행되는 메모리 공간.

: 지역변수, 매개변수가 만들어지는 공간. (Native Method Area)

: PC(register)에 의해서 현재 실행 중인 프로그램의 위치가 관리됨.

: LIFO구조로 운영이 되는 메모리 공간. → 메서드의 호출 순서를 알 수 있음.

: JVM이 동작시키는 것이 아니라 JVM도 하나의 Thread임.

 

※ JVM : 여러 개의 메모리를 이용하여 데이터를 저장해서 자바 프로그램을 동작시킴.

 


 

> Runtime Constant Pool (Literal Pool)

: 상수 값 할당이 되는 메모리 공간.

: 문자열 중 문자열 상수(Literal)가 할당되는 메모리 공간.

 


> 객체생성과 static의 관계

 

 


 

 

 


 

 

 


> private 생성자

: 자바 API에서는 private 생성자를 가지고 있는 클래스가 존재함.

  ex) System, Math 등

: 생성자는 반드시 public인 것이 아님.

 

 

 


> Class, Object, Instance 구분하기

: 클래스로 설계하고 객체를 생성해서 인스턴스를 만들고,

  클래스 이름에 '.'을 찍어서 이 객체를 사용하는 것이 객체 지향의 가장 기본적인 부분.

: 전부 객체를 칭하는 용어. 만들어지는 시점에 따라 조금씩 이름이 다를 수 있는 것.

 


 

> Class (클래스)

: 객체를 모델링하는 도구(설계도).

: 새로운 자료형을 만드는 도구.

 

> Object (객체)

: 클래스를 통해 선언되는 변수.

 

 

> Instance (인스턴스, 실체)

: 객체생성에 의해 메모리(Heap Memory)에 만들어진 객체.

: 객체가 구체적인 실체를 가리키는 상태(인스턴스 변수).

: 객체가 서로 구분이 되는 시점.

 


> Class, Object, Instance 실습

 

 

 

후기

 

저번 주에 벽을 느껴서 조금 자신감이 떨어진 상태였는데,

이번 주에 공부하면서 다시 회복된 거 같다..!

 

처음 듣는 내용이 낯설긴 했지만, 저번 주만큼 어렵지는 않았던 것 같고,

클래스, 객체, 인스턴스의 개념이 헷갈릴 때가 많았는데,

한 번에 비교하니까 머릿속에 내용이 확 정리된 거 같아서 좋았다.

 

아 당장 내일부터 스프링 강의를 들어야 하는데

너무 갑자기 스프링으로 넘어가는 느낌이라서 필수 수강 여부와 관계없이

선택 수강에 있는 자바 강의를 먼저 수강할지 고민이 되었다.

 

고민하다가 내린 결론은, 내가 스스로 느끼는 성취감도 중요할 거 같아서

우선 필수 강의 수강률 100%를 달성하는 걸 목표로 해 보기로 했다.

 

다음 주도 파이팅!