본문 바로가기

JAVA

(22)
[WEB]DAY15_ 다중 상속, 내부 클래스, 익명 클래스 다중 상속 : JDK8버전이후부터는 사실상 다중상속이 지원된다. 바로 인터페이스에서 일반 메소드를 선언할 수 있기 때문이다. 하지만 반드시 접근자는 default로 설정해주어야 한다. ① 두 개이상의 인터페이스에 동일한 이름의 필드를 지정받은 클래스에서 사용하고자 할 때에는(모호성) 재정의를 해서 사용한다. ② 부모 클래스와 인터페이스에 동일한 이름의 필드가 있다면 부모 클래스가 우선 사용된다. 만약 인터페이스의 필드를 사용하고자 할 때에는 재정의 후 인터페이스명.super.필드명()으로 호출하여 사용한다. 내부 클래스 : 하나의 클래스 안에 여러 기능들이 섞여있다면 각 기능들을 클래스로 분리해야 관리하기 쉽다. 하지만 다른 클래스로 만들게 되면 상속도 해주어야하고 오히려 관리하기 더 어려워질 수 있다...
[WEB]DAY14_추상 클래스, 인터페이스 추상 클래스 : 필드 안에 추상적인(미구현인) 메소드가 있는 클래스를 의미한다. 구현된 일반 메소드는 바디가 있지만 미구현된 메소드는 바디가 없다. 이 메소드를 추상 메소드라 하고, 추상메소드가 있는 클래스를 추상 클래스라고 한다. 추상클래스를 객체화한다면 생성자 뒤에 중괄호 영역이 열리게 되고 그 안에서 추상 메소드를 구현해야 메모리에 필드가 할당된다. 부모의 메소드를 골라서 재정의하고자 할 때에는 일반 메소드로 선언. 부모의 메소드를 반드시 재정의해야 할 때에는 추상 메소드로 선언. 부모의 메소드를 재정의하지 못하도록 할 때에는 상수 메소드로 선언. - 메소드는 저장공간이므로 리턴타입 앞에 final키워드를 붙인다. - 메소드 안의 코드 주소값을 변경할 수 없기에 재정의 불가능. 추상 메소드 : 선언..
[JAVA]DAY13_casting, instanceof casting up casting : 부모타입에 자식값이 들어가는 기법 down casting : 자식타입에 upcasting된 객체가 들어가는 기법 instanceof : 객체가 클래스타입이면 참, 아니면 거짓 즉, 조건식이다. - 객체명 instanceof 클래스명 "ABC" instanceof Character : false 10.64 instanceof Double : true
[JAVA]DAY12_접근 권한 제어자 접근 권한 제어자 default : 다른 패키지에서 접근할 수 없다. 자식도 불가능. public : 모든 곳에서 접근할 수 있다. protected : 다른 패키지에서 접근할 수 없다. 단, 자식은 가능. private : 다른 클래스에서 접근할 수 없다. private의 경우, set으로도 초기화 가능 - 외부에서는 접근 불가능 경고는 받지만 다른 클래스에서 접근할 수 있게 만드는 것 (getter setter) alt +shift + s + r 아무 지정 안할 경우, 디폴트 public과 protected의 차이 : 패키지가 다르면 protected는 사용할 수 없다. ,디폴트도 다른 패키지에서 접근하면 사용x public은 같은 프로젝트 안에 있으면 사용 가능 기본 생성자를 호출했을 때 ( ()안..
[JAVA]DAY11_상속 상속(inheritance) : 재사용 1. 새롭게 만들 클래스에서 기존에 사용 중인 클래스의 필드를 사용하고자 한다면, 상속을 받아서 자신의 것처럼 사용한다. 2. 여러개의 클래스를 선언할 때 겹치는 필드가 있다면 부모 클래스를 먼저 선언한 후 공통 요소들을 상속받아 사용한다. 상속 선언 class A{ A필드 } class B extends A{ A, B필드 } A : 부모 클래스, 상위 클래스, 슈퍼 클래스, 기반 클래스 B : 자식 클래스, 하위 클래스, 서브 클래스, 파생 클래스 생성자 자식 객체에서 부모 필드에 접근하기 위해서는 메모리에 부모 필드를 할당해야한다. 자식 생성자 호출 시 부모 생성자가 먼저 호출되고, 그 다음 자식 생성자가 호출된다. 따라서 자식 객체에서 부모필드에 접근할 수 있..
[JAVA]DAY10_클래스 배열 클래스 배열 선언 - 클래스명[] 배열명 = {new 생성자(), new 생성자(), ...}; - 클래스명[] 배열명 = new 클래스명[칸수]; 사용 - 배열명[index].필드명; 예제 문제 버스(버스번호) 정류장이 5개가 있고, 정방향으로만 갈 수 있다. 정류장 한 개당 1초가 걸리고 출발지는 랜덤이다. 출발지는 마지막 정류장이 될 수 없고 도착지는 출발지보다 앞에 있는 정류장을 선택할 수 없다. 교통비는 1250원이다. 경로를 각각 출력한다. 출력 예) 서초>교대>강남>도착 지하철(호선) 정류장이 7개가 있고, 역방향도 갈 수 있다. 정류장 한 개당 2초가 걸리고 출발지는 랜덤이다. 교통비는 1250원이다. 경로를 각각 출력한다. 출력 예) 강남 >교대>서초>도착 출력 예) 서초 >교대>강남>도..
[JAVA]DAY9_클래스 클래스 : 공통 요소들이 모여 있는 곳 1. 주어이다. Monkey.eat("바나나") 원숭이가 먹는다 바나나를 [주어] [동사] [목적어] 문장 맨 앞에 클래스가 나오기 때문에 클래스 앞 글자는 대문자로 작성한다. 2. 타입이다. 공통된 요소들을 반복해서 선언하는 것은 비효율적이다. 따라서 클래스내에서 공통요소를 한 번 선언하고, 해당 클래스를 구체화시킨 객체로 접근한다. 이 공통요소들을 필드라 하고 필드에 접근하기 위해서는 객체의 타입이 해당 클래스의 타입이여야 한다. 공통요소들을 묶어놓고 이름을 정할 때에는 추상적인 이름으로 정해야 하며, 추상적인 개념으로 필드에 접근할 수 없기 때문에 구체화된 객체를 만들어서 필드에 접근해야 한다. 예를 들어 도형은 추상적이므로 클래스이고, 세모는 도형 클래스를 ..
[WEB]DAY7_메소드 메소드 : 메소드는 중괄호 안에 작성한 코드들의 주소값을 저장하는 저장공간이다. 이름() 단, 키워드()는 메소드가 아니다!! (검은색글씨면 메소드, 다른 색이면 키워드) f (x) = 2x + 1 메소드명 매개변수 리턴값 메소드 선언 (1)리턴타입 (2)메소드명(자료형 (3)매개변수, ...){ (4)실행할 문장; (5)return 리턴값; } *내부 : 선언부 *외부 : 사용부 (1) 리턴값의 타입을 작성한다. 만약 리턴이 없다면 비워놓지 않고 void를 작성한다. (2) 동사로 작석한다(연필(매개변수)을 쓴다(메소드)). (3) 생략이 가능하고 필요에 따라 여러 개 작성할 수 있다. 만약 매개변수가 없다면 외부에서 값을 전달 받을 수 없다. (4) 생략이 가능하다. (5) 생략이 가능하다. 메소드 ..