https://gitlab.com/easyspubjava/javacoursework/-/tree/master/Chapter2
Chapter2 · master · easyspubjava / javacoursework · GitLab
GitLab.com
gitlab.com
클래스는 크기가 정해져 있진 않다.
대충 멤버변수만큼 잡힐 것 같긴한데
데이터 타입 + 변수 이름 = new라는 키워드 뒤에 Student()=> 생성자
new해서 학생 한명 생성
이렇게 생성되는 객체를 인스턴스
클래스 기반으로 여러개의 인스턴스가 생길 수 있어.
.뒤에 나오는 애들은 우리가 만든 거 외에 나머지는 object클래스의 메서드
클래스 베이스로 객체를 생성한 것
생성된 객체를... 객체라는 용어보다는 인스턴스라는 용어를 더 많이 씀.
인스턴스의 멤버변수와 메서드를 이용해서 값들 세팅
객체, 클래스를 만드는 방법
속성선언, 메서드 만들고
클래스 생성하고
생성된 클래스를 이용해서
참조변수(생성된 곳의 메모리 위치)로
.하면 통해서 쓸 수 있는 멤버변수와 메서드가 보임.
호출해서 값 넣고 사용해봄
인스턴스는 new해서 생성자사용해서 생성
힙메모리에
지역변수는 스택메모리
-------------
클래스 기반으로 여러개의 인스턴스 생성 가능하고
생성된 인스턴스는 동적 메모리인 힙에 할당
C나 C++에서 메모리를 쓸 때
c++은 new
C는 malloc
이 때 메모리를 할당 받는다고 하는데
메모리는 동적 메모리라고 함.(다른 말로heap)
필요할 때 할당 받고 다 쓰면 해제
c++ : new => delete
c : malloc => free()
ch04.Student@2133c8f8
패키지 이름. 클래스이름 =>클래스 풀네임
@참조값, 주소값 jvm이 준 가상 어드레스 주소값. (실제 메모리 주소x). 힙메모리의 가상 주소
참조변수(reference value, reference address)
클래스 : 일종의 청사진
객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 : 클래스의 속성, 특성
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성된 인스턴스의 메모리 주소 값
---------
오브젝트를 가져가서 사용하는 쪽을
클라이언트 코드
지역변수는 자동으로 초기화 되지 않아
멤버변수와 지역변수는 달라.
constructor overloading
똑같은 이름의 생성자가 여러개
--------------
메인은 다른 메서드랑 다름. 기본적으로 제공되는 구동하기 위한 함수
시작 클래스, 구동 클래스
----
대부분 생성자로 참조자료형으로 멤버변수를 쓰는 경우
꼭 생성자로 안할 수도 있지만
사용하기 전에 꼭 해줘야 널포인트예외 안뜸.
멤버변수에 참조형자료형을 만든 것들을 가져다 쓸 수 있다.
얘네들은 생성해서 사용해야한다
참조자료형으로 분리해서 하는게
각각 객체에 대한 기능과 역할을 분명하게 하는 게 있다.
데이터베이스랑 연관이 되어있다.
-----------
접근제어지시자를 통해서 객체지향의 가장 큰 특징 중 하나인 information hiding정보 은닉
이로 인해서 캡슐화(incapsulation?)구현이 된다
스캐너 java.util 밑에 있어서 import
--------------
멤버변수들은 기본초기값이 존재
int = 0
boolean = false
멤버변수의 오용, 오류를 객체를 잘못사용하는 것이 노출되고
객체의 역할에 문제가 될 수 있어서 프라이빗으로 막아주고
메서드로 제어.
쓸데없는 데이터의 오용을 막아줌
객체의 멤버변수에 접근제한을 가하므로써 객체 사용시 오류를 막을 수 있다.
디버깅도 쉬워 메서드만 확인하면 됨
사용하는 쪽에서 잘못 사용할 확률을 높임
다 프라이빗으로 해야하는 건 아님
get메서드만 하면 read only 가능
---------------
this는 인스턴스 자신의 메모리
객체를 new하면 힙메모리에 생성
얘의 주소값을 갖는애를 참조변수 reference value
변수자체는 인스턴스의 외부
변수가 인스턴스를 가르킨다
인스턴스 자체 내부에서 자기자신의 주소값을 갖는게 this
this는 자기자신의 메모리를 가르킴
생성자에서 또 다른 생성자를 부를 수 있다.
생성자는 원할 때 아무때나 호출되는 메서드와 다르다
생성자는 객체가 생성될 때 호출된다.(new될때)
상속관계에서 하위클래스에서 상위클래스의 생성자를 호출하는 경우 있다.
같은 클래스에서 생성자에서 생성자를 호출하는 경우
1.생성자가 여러개 있을 때, 생성자 이름으로 호출하는 게 아니라 this.로 호출
2.자신의 주소, 참조값자체를 반환할 때도 this
함수나 메서드 호출되면 그 지역변수 메모리는 스택에 잡힘
생성자의 역할은 인스턴스를 초기화 하는 역할
-인스턴스 자신의 메모리를 가리킴
-생성자에서 또 다른 생성자를 호출 할때 사용
(클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음
생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음
=>첫 줄이어야 한다.)
-자신의 주소(참조값)을 반환 함
-------------
static변수는 언제 만들어지냐면
프로그램 구동시 메모리에 감.
프로세스 상태(쓰레드 상태로 돌아감)
메모리에 올라갈 때 프로그램은 두가지 영역 지님
코드영역, 데이터영역(상수,static영역)
코드는 명령어 집합 instruction set(라인바이라인으로 실행)
상수, 리터럴literal, static constant영역에 잡힌다
인스턴스가 생성될 때 마다 사용되는 메모리는 힙메모리(동적메모리)
인스턴스가 사라지는 순간 gc에 의해 수거가 됨.
스태틱변수는 처음에 프로그램이 프로세스가 되서 메모리에 로딩되는 순간 데이터영역에 잡히고 프로그램이 다 끝나서 메모리에서 언로드되는 순간 없어짐.
------------
메인 안의 지역변수 =>스택메모리
얘로 인해서 참조되는 인스턴스. .해서 이름, 메소드 호출하는 건 heap메모리
static 변수는 공용메모리에 있다.(데이터영역)
다른 프로그램 언어들도 마찬가지로 3가지 영역있다.
1. 동적메모리(힙) : 필요할 때 allocation할당받아서 쓰고 다쓰고 나면 free, release
2. 스택메모리 : 함수,메소드가 호출될 때 마다 그 안에서 사용되는 지역변수가 쓰는 메모리
3.데이터영역, 상수영역(constant)프로그램이 로드될 때 부터 자리잡고 공유되서 쓰다가 프로그램 언로드 될 때 사라지는 영역. 변수가 인스턴스끼리 공유된다.
객체 생성될 때 초기화는 생성자가 해줌
--------------
static변수는 class변수, 정적변수
스태택메서드, 클래스 메서드
스태틱 메서드 안에서는 인스턴스 변수, 일반 멤버변수를 사용할 수 없어
일반 메서드 안에서는 스태틱변수 사용하는 거는 아무 문제가 되지 않아.
메모리 문제임. 스태틱변수와 달리 멤버변수는 인스턴스가 생성되지 않은 상태에서 사용할 수 없기 때문.
지역변수
-----------------
디자인 패턴이란
객체지향 프로그래밍에서
나중에 유지보수가 쉽고 좀 더 객체지향에 적합하게 코딩을 할 것인가
23가지 패턴으로 정리해놓은 것
4명의 저자가 정리.
객체지향을 이렇게 코딩하면 추후에 유지보수나 확장성에 좋다(extensable, maintainance에 좋다?)
객체지향.. 설계에 대한 책..?5년 3년 지나서 보면 좋은 책
여러개의 인스턴스가 생기면 문제가 되는 상황이 있다.
인스턴스는 여러가지 멤버변수들을 가지고
그 멤버변수 값이 여러가지가 되는데 그러는경우 문제가 되는 경우
날짜.
timezone에 의해서 제공되는 날짜는 여러개를 가질 수가 없어.
day, month, year, 시분초가 동일해야함
사원은 여러명일 수 있지만 회사라는 객체.하나는 유일
만약 회사가 두개가 되면 사원도 더블이 됨.
지점이 여러개일순있지만 같은 회사가 여러개일순없어
--------
상속이나 추상클래스, 인터페이스
클래스 다이어그램(약식으로 만들었.. uml 그대로 가져다 쓴건 아님)
박스안에
클래스이름
변수
생성자와 메서드
- : private
+ : public
git config --global --add safe.directory D:/FAST_JAVA
--------
배열 new로 만들어주면 초기화 되어있음
int는 0
double은 0.0
객체는 null로 initialize됨
그냥 지역변수가 아니라 new해주면 초기화 됨.
----------
원래는
ArrayList<Book> library = new ArrayList<Book>(); 해야했는데
요즘은
ArrayList<Book> library = new ArrayList<>(); 해도 자동으로 Book이다 인식
ctrl + shift + o (import 단축키)
'패스트캠퍼스 > Java Spring 웹 개발 마스터' 카테고리의 다른 글
ch 04. 자바의 유용한 클래스들 (0) | 2023.03.10 |
---|---|
ch 03. 객체지향 핵심 메모 (0) | 2023.03.09 |
ch 01. 자바 기초 메모 (0) | 2023.02.27 |