JAVA기초 -9

아기코딩단2·2022년 4월 2일
0

앞쪽으로 인스턴스 주소를 받고싶으면 static 빼면 된다
모든 non-static 메서드는 this라는 레퍼런스 변수를 가지고 있다
파라미터로 주소를 주는가 아닌가의 차이 주소를 안줄 때는 this 쓰면 댐

클래스 분류하기 public 접근제어 사용 이런 거는 이제 클래스를 관리하기 쉽도록 역할 별로 패키지에 분류하는 거임

도메인 역할을 수행하는 클래스를 별도의 패키지로 분류한다
-즉 데이터 타입역할을 수행하는 클래스를 도메인 클래스라 부른다 => Contact, Todo, Board. domain 패키지로 이동 근데 이렇게 하면 접근이 안댐 왜냐하면 필드의 기본 접근 범위는 (같은) 패키지이기 때문이다. setter/getter 메서드 사용해서 들고와랑

여러 프로젝트에서 일반적인 용도로 사용하는 클래스는 util 패키지로 분류하자!

  • 즉 특정 프로젝트에서만 사용되는 클래스가 아니라면 보통 그룹 패키지 밑에 둔다
    ArrayList를 mylist밑에 한정적으로 두지말고 com.eomcs.util로 옮김
    다른 패키지에서 사용할 수 있도록 public으로 공개하자 근데 어떤 ArrayList 내부에서만 사용되는 메소드는 공개할 필요없다

항상 뭘 허용할 건지 생각해야함

페이지 컨트롤러 역할을 수행하는 클래스를 controller 패키지로 분류한다.
분류하는 이유? 관리쉽게ㅇㅇ
cpu성능에 따라 달라진다ㅇㅇ한번에 받을 수 있는 데이터 64bit cpu는 8byte까지 걍 받을 수 있다.
근데 이제 32bit cpu면 long 선언하게 되면 초큼 느려진다 4byte가 한번에 이동할 수 있다.

메서드 기본이 static이다

만약 과목이 12개라면 어떨것 같아?
=> 음.. 그건 좀.. 값이 많아지면, 메서드의 파라미터가 많아지고,
=> 어... 메서드 선언할 때 복잡할 것 같은데!
=> 근데... 이 성적 데이터 있지.. 그냥 한 봉다리에 담을 수는 없나?

자바는 모든 경우를 고려해서 다양한 종류의 값을 담을 수 있는 변수를 제공하지는 않는다.
대신 여러 종류의 데이터를 묶어 새로운 형태의 데이터 타입을 만들 수 있는 문법을 제공한다.
그 문법의 이름이 "클.래.스"이다.

클래스란?
개발자가 자신이 개발하는 프로그램에서 사용할 특별한 형식의 데이터를 다룰 수 있는
새로운 데이터 타입을 정의하게 해주는 문법이다.
즉 byte, short, int, long, float, double, boolean, char 외에
새 형식의 새로운 메모리 구조를 갖는 데이터 타입을 정의할 수 있다.
이렇게 정의한 새 데이터 타입을

"사용자 정의 데이터 타입(user defined data type)" 이라 한다. 여기서 사용자는 개발자를 말한다

JAVA에서는 클래스 이름을 파스칼케이스(첫글자 대문자)로 명명하고, 오라클에서는 DB 테이블 설계할 때는 '_' 사용 DBMS마다 표기법이 다르다. 클래스 이름이 여러단어일 때는 NameSelect 이렇게 카멜 표기법으로 사용함

메인 메서드 안에서 정의된 클래스는 메인 메서드 안에서만 사용 가능 그래서 다른 곳에서 쓰려면 밖으로 빼고 static 붙여줘야함

오늘한 이거는 eomcs.java.lang 에 있음

메서드 리턴값에서 Score 또는 하위값 가능

createElement도 factory method 임

객체 생성과정이 복잡할 때 Factory method 사용함

(메인)메서드 안에 클래스를 선언하면 메인 메서드 안에서만 사용가능함
그걸 로컬클래스라고 부름

nested class (중첩클래스)

Js의 객체의 경우 없어도 프로퍼티 키와 값을 설정할 수 있지만
JAVA의 객체의 경우 프로퍼티 키가 class안에 존재해야만 값을 설정할 수 있다.

new명령어를 통해서 만들어진 애들 여기에 둬라

JAVA는 인스턴스 배열을 만드는 방법이 없다 C++는 가능
한번에 인스턴스를 왕창 만드는 방법은 JAVA에 없음
new 명령어를 사용해서 한개씩 만들어줘야함ㅠㅠ
C++에서는 new Score(3); 이런 식으로 하면 인스턴스를 왕창만들 수 있다

자바 캐치프라이즈

static 메서드는 같은 static 멤버만 사용가능하다

method 밖으로 뺏으면 static 붙여야함
JAVA에서 String 도 new String("홍길동") 이런식으로 만들어짐

인스턴스를 생성하면 각 값의 기본값 세팅 레퍼런스 변수는 null 세팅 int 는 0 float 는 0.0

인스턴스를 참조하는 애가 하나도 없다면 Garbage가 되는데 이후 GC에 의해서 사라짐

JVM의 garbage 관리
JVM은 객체의 참조 상태를 관리하기 위해 "레퍼런스 카운트(reference count)"를 이용한다.
s1이 가리키는 객체처럼 주소를 알고 있는 변수가 늘어나면 레퍼런스 카운트를 증가시키고
s2이 이전에 가리켰던 객체처럼 주소를 알고 있는 변수가 줄어들면 레퍼런스 카운트를 감소시킨다.
레퍼런스 카운트가 0인 상태가 "가비지(garbage)"이다.

profile
레거시 학살자

0개의 댓글