자바 어지러움주의

2019. 3. 13. 14:13Java

클래스 ->설계 도면 

------------------------

메소드 -> 동작 객체의 동작

매개변수 수 애매할때-> 타입 매소드이름 (타입'''values){} 

int sum(int'''values) {}

--------------------------

필드 -> 속성 객체의 데이터가 저장되는 곳 == 클래스멤버변수 == 멤버변수

객체의 고유 데이터 + 객체가 가져야할 부품 + 객체의 현재 상태 데이터를 저장하는 곳

선 객체생성 후 필드사용 이유는 필드는 객체에 소속된 데이터

필드를 사용한다? -> 필드값을 읽고 변경하는 작업 -> 객체 이름.필드이름

-------------------------------------

생성자 -> 클래스명과 동일한 이름을 가진 리턴타입이 존재하지 않는 메소드

객체를 참조한다는 것은 객체 생성을 의미

객체 초기화 담당, 오버로딩 핵심 #오버라이딩이랑 구분#

객체 초기화란? 필드를 초기화하거나 메소드를 호출해서 사용할 준비하는것

Car car = new Car(int cc의값, String color의값)

Car(int cc, String color) 이부분이 기본생성자 호출 

필드 초기화가 2가지 있는데 첫째는 필드값에서 자체 초기화 두번째는 생성자의 매개값으로 초기화

-----------------------

인스턴스 -> 클래스로부터 만들어진 객체

------------------------------------

쓰레드

-----------------------------------------

인스턴스멤버 = 인스턴스 필드 + 인스턴스 메소드

참조변수(객체이름).멤버

생성된 인스턴스에 접근은

참조변수(객체이름).필드

-------------------------------------------------

멤버변수 == 필드 == 클래스멤버변수 == 인스턴스변수

--------------------------------------------------

---------------------------------------------------

클래스변수 == 정적변수 == static변수 == 클래스 안에서 static이 붙은 필드

클래스 로더가 클래스를 로딩이 끝나면 사용가능

사용시에 클래스이름.정적멤버이름 

객체없이 사용가능, 클래스안에서 고정

초기화시는 

static

{

이 안에서 초기화 가능 정적 변수 모두

}

this, 인스턴스 변수 사용불가

단 객체 생성후 객체이름.멤버이름으로는 정적멤버{}안에 사용가능

------------------------------------------- 

전역변수 전체에서 쓸 수 있는 변수 MAIN()메소드안에 있는 변수

--------------------------------------------------------

로컬변수 == 지역변수 ->메소드, 생성자 안 선언한 변수 그안에서만 쓸 수 있는변수 

----------------------------------------------------------

꿀팁 

메소드안, 생성자안 로컬변수는 초기화 해야 사용가능

전역변수와 필드는 초기화안해도 사용가능

객채 생성시(필드에 전달할 초기값 적음) 

->생성자 호출->

생성자의 매개변수를 통해서 필드의 초기화값 전달

----------------------------------------------------------

싱글톤 - 객체 1개만 유지 private로 new연산자로 생성자를 만드는것을 막아야함

싱글톤 타입의 변수들이 하나의 객체의 주소값을 참조

---------------------------------------------------

this - > this.필드는 this라는 참조 변수로 필드 사용

-----------------------------------------------------

this(매개변수이름 혹은 값) -> 다른 생성자 호출시 사용, 생성자 첫줄에만 사용

-------------------------------------------------------

final ->초기값을 정하면 변경불가  보통 변경가능상태에서 뭔가 발생하고나서 변경불가상황일때

예를 들면 주민등록번호는 사람이라는 메소드가 생성되고 나서 부여가능

초기화 두가지 클래스안에서 초기화

생성자로 초기화

final을 상수로 보지않는이유

불변의 값은 객체마다 저장할 필요가 없는 공용성을 띄고 여러가지 값으로 초기화 불가능

허나 fianl필드는 객체마다 저장되고 생성자의 매개값을 통해 여러가지 값을 가질 수 있어서

상수는 static + final 기능이 있어야 가능하다

static final은 객체마다 저장안되고 클래스에만 포함됨

-----------------------------------------------------------------------

겟셋으로 private로 보호된 정보 가져오는 과정

셋 메서드(매개변수로) 변경하고 싶은 값을 보호된 필드값으로 넘김

겟 메서드()에서 필드값을 리턴

main()안에서 변경된 셋값을 사용

출력시 겟으로 리턴한 값을 출력할 시 사용

----------------------------------------------------------------------


??????보통 생성자수와 객체수랑 같나?

??????타입[] 타입객체이름 = new 타입[숫자]

??????타입[] 객체이름 = new 타입[숫자]

??????배열에 값을 넣어주어야 객체가 생성되고? 주솟값이 생기는건가?

클래스이름이 kim

Kim[] mintaek = new Kim[100]

배열선언과 공간할당한 케이스

kim형 1차원배열을 100개 만들어서 그 참조값을 mintaek에 저장하겠다

모든 공간에 0이라는 값이 들어있음


이거는 크기가 100인(인데스가 0부터 99까지의) 널값의 배열을 선언

하지만 객체가 생성된것은 아님

for문이든 뭐든 값을 넣어줘야 객체생성

정적선언시 Abc[] abc = new Abc[100]

--------------------------------

final클래스 - 상속 못받음 

final메소드 - 오버라이딩 못함

fianl필드 - 변경불가

--------------------------------


자바특징

객체지향

캡슐화

다형성

동일한 타입을 사용하되 필드의 값을 다양하게 사용하여 객체를 만듬으로써 

다채로운 실행결과를 야기

-------------------------------------------------

실행문(main)안에서

자식 객체 만들어서 부모와아들 모든 메서드,필드 사용가능

부모 객체 만들어서 아들 메서드,필드 사용불가능

???자동타입변환 후 강제 타입변환하면 

부모멤버 사용가능????

ex)Child child = new Child();

Parent parent = new Parent();

Parent parent2 = new Child();

child변수와 parent2변수는 Child객체 참조 

Child child2 = (Child) parent

???있던 객체를 타입변환하는것도 아니고 어차피 새로운 객체가 생기는건데 굳이 이렇게 복잡하게 

캐스팅을 해야하나????

----------------------------

super -> 부모 객체를 참조하고있음

자식 생성자()

{

안에서 super(); 첫줄에 적어야함 

}

자식 메서드안에서 오버라이딩당한 부모 메서드 사용 가능

super.오버라이딩당한 부모메서드 


부모 클래스

부모 메소드

부모 필드


자식 클래스

자식 메소드

자식 필드


실행(main)

부모클래스타입 객체이름 = new 자식(); 자동형변환

자식 메소드, 필드 사용못함

자식클래스타입 객체이름 = (자식타입) 부모;

자식 메소드, 필드 사용가능

?????????추클은 자동형변환 및 캐스팅 가능?

????디폴트 생성자 안에 this(매개 변수 값);을 호출하면 다른 생성자(다른 매개변수타입과 이름)이 실행되나요?

ex) class Hi {

void Hi(){ 

this("안녕");

}   

void Hi(String a)

{

System.out.println("실행되는거 실화?");

}

???????????this("매개변수값") ->해당 메서드 호출 매개변수값이 문자니 매개변수 타입은 String

그럼 메서드를 호출하는 this의 사용범위는?

클래스안? 생성자안? 매서드안? 


추상클래스

어찌보면 최상위 깔끔한 정리를 위한 껍데기 클래스

객체생성불가 단 생성자는 만들수 있음 super이용해서

추상메서드

빈껍데기 메서드 중괄호 빠지고 추상클래스 안에서만 존재가능