목록분류 전체보기 (175)
가자미의 개발이야기
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..
a. 포함관계 class Circle{ int x; int y; int r; } class Point{ int x; int y; } 다음과 같은 클래스들을 Point를 재사용한 포함관계로 표현하면 class Circle{ Point c = new Point(); int r; } class Point{ int x; int y; } 이렇게 코드를 재사용할 수 있다. b. 상속 관계 상속은 어떤 클래스의 모든 특성(변수와 메소드)를 다른 클래스에 그대로 전해주는 것을 의미한다. 상속은 코드 재사용이 아닌 클래스 간의 공통된 규칙을 정의할 때 사용된다. 자바는 c++과는 다르게 복수 상속을 허용하지 않는다. c. 상속이냐 포함이냐 그렇다면 옳은 상속의 기준은 무엇일까? 클래스들을 말로 풀어봤을 때 어떤 쪽에 해..
a. 배열 int[] ref=new int[5]; int[] ref={1,2,3,4,5}; int[] ref=new int[]{1,2,3,4,5}; int ref; ref=new int[5]; int ref; ref=new int[]{1,2,3,4,5}; 이를 통해 자바에서 배열도 인스턴스로 생성됨을 알 수 있다. 클래스도 배열을 만들 수 있다! 배열은 다른 메소드의 매개변수로 참조가 가능하고 메소드의 반환값으로 배열이 참조를 받을 수 있다. 자바 배열의 초기화 메소드 Arrays클래스의 static메소드인 fill(int[] a, int val) 두번째 인자로 전달된 값으로 배열 초기화 Arrays클래스의 static메소드인 fill(int[] a, int 어디부터, int 여기까지, int val) ..
printf 메소드 : 문자열을 서식지정자(%d, %f %c등...)로 표현하는 메소드 Scanner 클래스 : 순서대로 데이터를 읽어드리는 메소드 띄어쓰기로 구분해서 읽어냄(?) Scanner 인스턴스 생성은 데이터를 뽑아 올 대상과의 연결을 의미!!! Scanner sc=new Scanner(source); 그렇다면 키보드로부터 데이터를 입력받으려면? Scanner sc = new Scanner(System.in); sc.nextInt() 메소드는 다음 정수값을 가져오란 뜻!! 자료형에 따라 nextInt, nextByte, nextLine...