DAY - 18
인터페이스
인터페이스는 일종의 추상클래스이다.
추상클래스처럼 추상메서드를 갖지만 추상메서드만 포함하고 있으면 되는 추상클래스와는 달리
오직 추상메서드와 상수만을 멤버로 가질 수 있으며 그 외의 다른 어떠한 요소도 허용하지 않는다.
클래스간의 상속에서 다중상속을 자바에서 막은 이유를 복습하자면 다음과 같다.
1. 변수의 이름이 겹칠 경우 어떤 변수를 사용할지 모른다.
2. 메서드의 이름 또한 겹칠 경우
이 경우 컴파일러가 어떤 것을 써야할지 혼동이 오기 때문에 컴파일에러가 발생한다.
이런 일을 미연에 방지하고자 다중상속을 허용하지 않는 것인데 인터페이스의 경우 이런 문제 자체가 발생하지 않기 때문에 다중상속을 허용한다.
여기서 정확하게는 다중상속이 가능하다일 뿐 자주 사용하지는 않는다.
인터페이스의 모든 멤버번셔누느 public static final이어야 하며 생략가능하다.
또한 모든 메서드는 public abstract여야 하며 생략가능하다.
인터페이스는 클래스와 달리 Object클래스와 같은 최고 조상이 없다.
인터페이스도 추상클래스와같이 자체로 인스턴스 생성을 하지 못하고 포함하고있는 추상메서드를 구현시킬 클래스를 작성해야하는데 이는 추상클래스와 크게 다르지 않다.
추상클래스에서 extends라는 키워드를 썼다면 인터페이스에서는 implements라는 키워드를 쓸 뿐이다.
인터페이스의 이름은 주로 ~할수있는 의 의미를 갖는 able형태로 많이 짓는다.
인터페이스의 다형성
인터페이스 또한 다형성이 가능하다.
즉 인터페이스 A를 클래스 B가 구현했을 때, B의 인스턴스를 A타입의 참조변수로 참조하는 것이 가능하다.
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.
인터페이스의 장점
인터페이스를 사용하는 이유와 장점을 정리해보면 다음과 같다.
1. 개발시간의 단축
2. 표준화 가능해진다.
3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
4. 독립적인 프로그래밍이 가능하다.
3번의 이유 때문에 이름이 인터페이스 이다.
이처럼 직접적인 관계로 묶인 클래스들이 아닌 간접적으로 인터페이스에 의해 엮인 클래스들을 loose coupling(느슨한 결합도)로 엮여있다고 한다.
이와 더불어 high cohesion(높은 응집도)는 프로그래밍에 있어 절대적인 진리에 해당한다.
결합도를 낮춰 유지보수가 용이하게 하고 응집도를 높여 프로그램의 간결함에 힘을 준다.
디폴트메서드와 static메서드
원래 인터페이스에는 추상메서드만 선언할 수 있었는데 1.8버전부터 디폴트메서드와 static메서드도 추가할 수 있게 되었다.
디폴드 메서드란 추상 메서드의 기본적인 구현을 제공하는 메서드로 추상메서드가 아니기 때문에 디폴트 메서드가 새로 추가되어도 해당 인터페이스를 구현한 클래스를 변경하지 않아도 된다.
디폴트 메서드 앞에는 default를 붙이며 추상메서드오 ㅏ달리 일반 메서드처럼 몸통{}이 있어야 한다.
인터페이스에서의 디폴트메서드와 static메서드는 잘 쓰면 좋지만 안쓰는것을 추천한다.
내부클래스
내부 클래스는 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다.
클래스에 다른 클래스를 선언하는 이유는 서로 긴밀한 관계에 있기 때문이다.
내부클래스의 장점으로는
1. 외부클래스의 멤버들을 쉽게 접근할 수 있다.
2. 코드의 복잡성을 줄일 수 있다.(캡슐화)
내부클래스의 종류는 변수의 선언위치에 따른 종류와 같다.
1. 인스턴스 클래스 - 외부클래스의 멤버변수 선언위치에 선언
2. 스태틱 클래스 - 외부 클래스의 멤버변수 선언위치에 선언되며 특히 static메서드에서 사용될 목적으로 선언된다.
3. 지역 클래스 - 외부 클래스의 메서드나 초기화블럭 안에 선언하며 선언된 영역 내부에서만 사용될 수 있다.
4. 익명 클래스 - 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)
내부 클래스는 그 사용 빈도가 매우 낮다.
오늘 java는 여기까지!
오늘부터 2시간씩 HTML을 병행하고 오후의 남은시간은 팀 미니프로젝트를 위해 할애한다.
HTML
html은 도구로써 Visual Studio Code를 쓴다.
처음 설치할 때 workspace를 어디에 두어도 상관이 없지만, 기본적으로 소스코드들은 일괄적으로 관리해주는게 편하기 때문에 java의 소스코드가 있는 폴더에 workspace_web을 따로 만들어주었다.
코드 작성 후 실행은 workspace_web에 생성된 .html파일로 실행한다.
팁
stat counter 사이트에 들어가 보면 각 브라우저별 점유율을 국가별, 전세계 등 여러 방법으로 확인이 가능하다.
또한 구글트렌드에서 검색어 동향또한 파악이 가능하다.
플러그인 설치
Visual Studio Code를 좀더 잘 사용하기 위해서는 몇가지 플러그인을 설치해두어야 한다.
메뉴의 맨 아래 extendtions에서 open in browser를 깔아준다.
이클립스에서 ctrl F11로 컴파일을 진행했다면 여기서는 alt b로 실행한다.
이때 기본 브라우저로 실행이 되는데 shift alt b로 실행하면 브라우저를 선택해 실행할 수 있다.
같은 방법으로 live server도 설치해준다.
폰트설정
이클립스에서와 마찬가지로 폰트설정또한 해준다.
D2Coding은 이클립스에서 쓸때 이미 깔아두었기 때문에 별도의 다운로드 없이 적용만 시킨다.
File - preferences - setting로 들어가
정확히 오타없이 위처럼 타이핑해주어야 한다.
우리가 사용할 html책은 이지스퍼블리싱 출판사의 고경희씨의 책인데 책 안의 예제를 작성하기 위해 이미지파일을 다운받는다.
오늘은 여기까지 세팅만 하였고 어제 하던 svn세팅을 마저 했다.
windows - preferences - team 에서 svn connector를 설치하고 이클립스를 재실행하였다.
이후 원격컴퓨터에 접속하여 Visual SVN server를 실행하였다.
http:// ~~~~ :81/svn/java/
라고 나오는데 81포트 앞까지가 내부 도메인명이다.
여기서 내부 도메인명을 np.나의도메인 으로 바꿔도 같은 화면이 나오게 된다.
이 URL을 크롬에서 입력해 들어가면 이전과 비슷하지만 조금은 다른 화면이 나오는데 이게 현재 저장소가 완료된 상태이다.
저장소가 완료되었으니 이클립스의 소스코드를 공유해볼 차례이다.
공유할 프로젝트를 우클릭하고 team - share project - SVN을 선택하고
URL위에 svn주소를 적고 Authentication user에 아이디와 비밀번호를 적으면 끝이다.
이렇게 공유를 하고 나면 패키지 옆에 숫자가 생기는데 이건 버전을 의미한다.
또한 내용을 수정해서 현재 svn에 저장된 코드와 다를 경우 꺽쇠가 생긴다.
13버전에 꺽쇠가있으니 변경된 상태를 의미한다.
수정 후 반영은 우클릭 - team - commit 으로 한다.
커밋을 하면 수정된 파일만 버전이 하나씩 올라간다.
여기서 update의 경우, 반대로 저장소에 있는것을 가져오는것인데 수정한 이후에는 변화가 없다.
update to revision 에서 head는 최신버전으로 업데이트를 의미하고 실제 로컬을 해당버전으로 돌아간다.
커밋을 하기 위해서는 서버의 버전과 내 버전이 같아야 한다.
revert는 내가 수정한것 위에 덮어써버리는데, 이는 수정한게 다 날라가므로.. 조심해야한다..
땡겨오는 방법도 있는데 import - svn - project from svn으로 들어가면 된다.
오늘은 여기까지!!
미니프로젝트가 진행되니 확실히 정신이 없다.
이제 전체과정의 1/5 지나갔다. 시간이 확실히 빨리 지나가니.. 좀더 시간을 아껴야한다..