목록Java/자바 기본 문법 (68)
가자미의 개발이야기
a. Object 클래스 모든 클래스의 최고 조상 Object클래스의 멤버들은 모든 클래스에서 바로 사용가능 b. Object 클래스 메서드 메소드 명 설명 protected Object clone() 객체 자신의 복사본을 반환 public boolean equals(Object obj) 자신과 obj가 같은 객체인지 참거짓 protected void finalize() 객체가 소멸될 때 가비지 콜렉터에 의해 자동적으로 호출(사용빈도 낮음) public Class getClass() 객체의 정보를 담고 있는 Class 인스턴스 반환 public int hashCode() 객체 자신의 해시코드 반환 public String toString() 객체 자신의 정보를 문자열로 반환 public void noti..
자바 가상머신의 메모리 모델은 메소드 영역-메소드의 바이트코드, static 변수 스택 영역-지역변수, 매개변수 힙 영역-인스턴스 이렇게 세가지로 나뉜다. 메소드 영역은 한번 저장된 내용은 프로그램이 종료될 때 소멸 스택 영역은 변수들을 임시저장 힙 영역은 둘 이상의 영역에서 참조 될 수 있는 인스턴스를 저장(따라서 스택에 저장하지 않음) 참조 관계가 끊기면(아무도 해당 인스턴스를 가르키지 않으면) 사라지게 된다.(가비지콜렉터로 보내지게 된다.)
a. 에러와 예외 에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 : 프로그램 코드에 의해 수습될 수 있는 미약한 오류 b. 에러의 종류 컴파일 에러 : 컴파일 시 발생 런타임 에러 : 실행 시에 발생 논리적 에러 : 의도와 다르게 실행 c. 예외 클래스의 계층 구조 Exception클래스와 그 자손들 RuntimeException클래스와 그 자손들 Exception클래스들 : 사용자의 실수. 외적인 요인에 의해 발생 RuntimeException클래스들 : 프로그래머의 실수로 발생 이렇게 두가지로 예외 클래스를 분류할 수 있음. d. try catch 예외 발생에 대비한 코드 작성. 프로그램의 비정상 종료를 방지. 정상적 실행 상태 유지 try { 관찰 영역 } catch(예외 클래스..
a. public 인터페이스 안에 선언되는 추상 메소드는 기본적으로 public이다. 왜냐면 외부 클래스들이 접근해야 하기 때문이다. interface Printable { public void print(String doc); } b. 상수 선언 가능 인터페이스는 인스턴스를 생성할 수 없기 때문에 인스턴스 변수를 선언할 수 없다. 하지만 상수는 선언 가능하다. 이때 public static final 선언은 기본으로 된다. interface Printable { public static final int PAPER_WIDTH=70; } c. 추상 메소드 구현 인터페이스에 선언된 추상 메소드는 구현한 모든 클래스 내에서 구현 해줘야 한다. 이를 해결하려면 인터페이스를 상속시켜 새로운 추상 메소드를 추가한..
인터페이스는 몸체 없는 메소드만 갖는 클래스와 비슷하게 생겼다. 인터페이스는 복잡한 클래스의 사용방법을 정리한 장치이다. 혹은 복잡한 클래스를 인터페이스에 선언된 추상 메소드의 기능만 사용하도록 정리하는 역할을 하기도 한다. 예를 들어 어르신분들은 전화나 문자를 써야할 때 스마트폰은 기능이 너무 많아 사용하기 불편할 수 있다. 이때 스마트폰을 전화 문자의 기능으로만 접근할 수 있게 한다면 어떨까? 여기서 그 역할을 인터페이스가 한다. 전화와 문자는 스마트폰의 메소드이자 인터페이스의 추상 메소드가 된다. 다시 쉽게 이해하자면, 인터페이스는 스마트폰 설명서같은 역할을 한다... 예시. 이렇게 프린터블 인터페이스를 선언했다. 이 안에는 추상 메소드로 print메소드가 있다. interface Printable..
a. final 클래스와 메소드에 final을 앞에 붙여주는건? 상속하거나 오버라이딩 금지!라는거~ 제어자 대상 의미 final 클래스 상속되지 않는 메서드 메서드 오버라이딩이 불가능한 메소드 멤버변수 변수 앞에 final이 붙으면, 값을 변경할 수 없음.(상수) 지역변수 b. @Override @Override 표시는 오버라이딩은 메소드 이름과 매개변수 반환형이 모두 같아야 가능한데, 매개변수가 다르거나 반환형이 다른 경우에 오버라이딩하고 싶을 경우 정의하기전 윗줄에 써주면 오버라이딩이 가능해진다. 다음에 오는 메소드가 오버라이딩된다는 선언이다. 이때 다음에 오는 메소드가 오버라이딩 되지 않는 경우 컴파일에러를 일으킨다. . -전달받는 매개변수에 따라 다른 메소드를 선택한다. 즉 부모 클래스의 메소드가..
상속의 특징 중 하나는 부모 클래스의 기능을 가져간다는 것과, 참조변수의 자료형이 부모 클래스로 통일시킬 수 있다는 것이다. 즉 한 참조변수 형에 다양한 인스턴스를 할당할 수 있고 무엇보다도 오버라이딩 메소드로 반복문으로 코드를 짜더라도 클래스별로 시기적절한 메소드가 실행된다.!!!!!
참조변수명 instanceof 클래스명 만약 참조변수명이 클래스명을 참조하면 true 만약 참조변수명이 클래스명의 자식 클래스의 인스턴스이면 true 다시 말하면 클래스명이 참조변수의 인스턴스 혹은 인스턴스의 부모냐? 라고 묻는 연산자 다시말하면 참조변수는 클래스의 참조 가능성을 가늠하는 역할을 한다. 그런데 오버라이딩으로 대신할 수 있지 않을까? 상속은 연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있다!!!!?
a. 오버라이딩 상속을 받은 자식 클래스에 부모 클래스에 있는 메소드를 같은 이름으로 다시 정의하고 있다면 자식 인스턴스로 생성된 참조변수는 부모던 자식이건 간에 부모클래스는 가려지고 자식 클래스가 호출되곤 한다. 하지만 부모 인스턴스로 생성된 부모 인스턴스는 부모 메소드가 볼 수 있다. 이렇게 외부로는 호출할 수 없는 메소드를 인스턴스 내부에서 부를 수 있을까? 바로 해당 메소드 안에 super.해당메소드이름(); 를 넣어줘서 부모 클래스의 메소드를 자식 클래스에서 부를 수 있다. 하지만 인스턴스 변수는 오버라이딩 되지 않는다! b. 오버라이딩의 조건 선언부가 조상 클래스의 메서드와 일치해야 한다. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. 예외는 조상 클래스의 메서드보다 많..
a. 스태틱의 상속 부모 클래스에 static 변수 혹은 메소드가 있다면 상속받은 클래스에도 상속 될까? 답은 아니오이다. 다만! 부모 클래스가 static에 직접 접근 가능한 권한은 상속된다. b. 상속 주의사항 누군가가 핸드폰을 샀다고 가정하자. 그 사람은 기계치라 전화 문자만 사용할 수 있다. 이 사람은 스마트폰을 가져도 기본적인 핸드폰 기능만 사용할 수 있다. 자식 클래스의 기능을 사용하고 싶으면 자식 클래스로 접근해야 가능하다. 부모 클래스로 접근하면 부모 클래스의 기능만 사용할 수 있다. (같은 주소를 참조하지만, 활용하는 영역의 차이) 참조를 부모 클래스로 하느냐 자식 클래스로 하느냐에 따라 기능의 한계가 발생할 수 있다. class HandPhone{} class SmartPhone ext..