본문 바로가기

Programming/Java * Spring31

[Java] 11. 예외처리(Exception) 상속구조, finally, throws 등장 배경 C언어 시절에는 예외처리를 if문(if, else if, else)으로 처리했다. 단점은 실행코드와 예외처리 코드가 지나치게 반복되고, 실행코드보다 예외처리코드가 훨씬 더 많아지게 되었다. 그러므로 코드의 가독성이 낮아지는 결과도 생겼다. 그래서 C++은 실행코드 영역과 예외처리 영역을 분리하는 예외처리 문법을 도입하였다. 자바는 C++을 모태로 탄생되었고, C++에 비해서 예외처리를 훨씬 더 강화해 설계하였다. 상속 구조 예외(Exception)와 에러(Error)는 모두 Throwable의 상속을 받는다. 예외는 내(프로그래머)가 짠 코드 상의 문제가 있는 것으로 코드를 수정하면 해결되고, 에러는 시스템 상에서 발생한 비정상적인 상황으로 프로그래머의 통제를 받지 않는다. Finally tr.. 2019. 3. 29.
[Java] 10. 인터페이스(Interface), 의존성 주입 無常 : 만물이 끊임없이 변해 한 순간도 동일한 상태로 머물러 있지 않음 이처럼 개발환경도, 소프트웨어도, 고객의 요청도 계속 변한다. 이에 프로그램 설계의 유연성을 위해 등장한 것이 인터페이스이다. Interface : 접점, 규약, 약속 클래스의 상속(extends): 하위 분류 A는 상위 분류B의 한 종류이다(→A is a kind of B) 인터페이스의 상속(implements): 구현 클래스A는 인터페이스B 할 수 있어야 한다(→A is able to B) 인터페이스에 선언하는 매서드는 자동으로 public abstract가 붙는다. 인터페이스에 선언하는 필드는 자동으로 public final static가 붙는다. 의존성 주입(Dependency Injection) : 클래스 내부에서 결정하지.. 2019. 3. 28.
[Java] 09. 추상클래스(abstract) (설계 관점에서) 클래스의 종류1. 구현 클래스모든 매서드가 이미 구현되어져 상속된다. 일반적인 클래스. 2. 추상 클래스단 1개라도 구현되지 않은 매서드가 존재하는 것. 매서드 명은 있으나 기능을 구현하지 않은 것 → 판단의 여지를 남겨두는 상황. 구현 안 된 매서드가 있으므로 객체 생성이 안 됨(실체화 불가), 무조건 상속을 전제로 만들어진 클래스. 3. 인터페이스 클래스모든 매서드가 구현되어 있지 않음. Spec, 상세서, 명세서를 작성할때 사용. 클래스와 클래스 간의 통신하는 방식을 의미. 추상 클래스 예시>>> 정규직, 계약직, 파트타임 세 가지 유형의 직원을 가진 회사의 급여산정 프로그램을 만든다고 해보자. 고용유형 별 급여 산정 기준이 다르기 때문에 부모클래스인 직원클래스에서 매서드를 구현하.. 2019. 3. 27.
[Java] 08. 매서드 오버라이딩(Method Overriding), 오버로딩과의 차이 매서드 오버라이딩(Method Overriding)부모가 이미 구현해 놓은 매서드를 대신하거나 추가 확장하는 것즉, 자식 클래스에 부모 매서드와 동일한 매서드를 구현하는 것부모 참조변수에 담아도 실제 자식 객체의 매서드를 호출하게 됨(편의성 > 일관성)그러나, 부모 참조변수에서는 자식 객체의 매서드 호출 불가장점: 매개변수를 최상위 부모변수로 매서드 1개만 만들면 된다 !!!!부모(Generalization - 일반적), 자식(Realization - 구체적) public class Speaker { private int volumeRate; void showCurrentState() { System.out.println("볼륨 크기: +volumeRate"); } void setVolume(int vo.. 2019. 3. 26.
[Java] 07. Is Kind Of 관계, Has A 관계 Is Kind Of 관계(ISA 관계, 상속관계)포유류 ← 고양이과 ← 호랑이 처럼 명확한 종속관계를 보일때 상속(extends)을 고려한다. 이를 Is Kind Of 관계 또는 ISA 관계라고 명칭하며, [호랑이 is 고양이과], [고양이과 is 포유류] 라고 표현하고, UML 상에서는 Generalization(△)으로 정의한다. Has A 관계 (포함관계) 대부분의 자연계의 질서에서는 상속관계가 명확하지만, 인간 사회에 체계를 부여해야할 때는 그렇지 않은 경우가 많다. 가령 위의 관계도에서 Gun을 Police에게 상속한다면? Police의 자식클래스인 Nursing Police에게도 자동적으로 상속되기 때문에 문제가 생긴다. 따라서 필요한 경우에만 사용하는 Has A 관계를 적용해야 한다. 그리고.. 2019. 3. 26.
[Java] 06. String, StringBuilder 속도 비교 String 클래스 변경 방법 String 클래스는 작은 문자의 변화에도 계속 새로 객체(인스턴스)를 생성하기 때문에 문자열의 변경이 불가능하다. 각각 다른 인스턴스이므로 변수간의 해시 값이 다른 것을 확인할 수 있다. 이런 작업이 빈번해지면 성능저하의 요인이 된다. Append: 인덱스 끝에 삽입 Insert: 인덱스 중간에 삽입 String str1 = "Lemon"; String str2 = str1+'a'; // str1.concat('a') String str3 = str2+'b'; String str4 = str3+"cd"; System.out.println(str1); System.out.println(str2); System.out.println(str3); System.out.printl.. 2019. 3. 25.
[Java] 05. static 멤버의 접근 방법과 활용 static 멤버의 접근 방법 1) 클래스 내부에서 자유롭게 접근 2) 클래스 이름으로 접근 3) 객체 이름으로 접근 class AccessWay{ static int num=0; AccessWay(){ incrCnt(); } public void incrCnt() { num++; } } public class ClassVarAccess { public static void main(String[] args) { AccessWay way = new AccessWay(); // 생성자 안에 있는 매서드가 호출됨(num+1) AccessWay.num++; // 클래스명으로 접근(num+1) way.num++; // 객체로 접근(num+1) System.out.println("num = "+AccessWay... 2019. 3. 20.
[Java] 04. 접근 권한(Access Authority) 접근 권한(Access Authority) Public: 어디서나 마음대로 접근 호출가능 Protected: 패키지가 동일하거나 다른 패키지라도 상속이면(권한이 있으면) 접근 호출 가능 Default: 동일한 패키지만 접근 호출 가능 Private: 클래스내에서만 접근호출가능 필드의 접근권한 1) 필드는 일반적으로 private으로 설정한다. 2) 대신 getter나 setter매서드를 이용해서 값을 넣거나 가져올 수 있도록 한다. getter나 setter는 일반적으로 default나 public을 준다. 3) setter 매서드에는 들어오는 값을 확인하는 코드를 넣을 수 있기 때문에 직접 필드에 접근하는 것보다 안전성이 높아진다. 매서드의 접근 권한 1) 매서드는 기본적으로 default나 publi.. 2019. 3. 20.
[Java] 03. 패키지(Package) package는 class보다 상위 분류 개념이며 동시에 폴더구조이다.class 제작시 별도의 package명을 주지 않으면 default package 소속이 된다.다른 package의 클래스를 사용하고 싶으면 import를 한다. - 단축키 [Ctrl + Shift + o]import 없이 사용할 수 있는 package는 자기자신이 속한 package와 java.lang이다.java에서 별도로 접근제한자(private, protected, public)를 주지 않으면 default(동일 패키지 내에서는 접근이 가능) 접근권한을 갖게된다. → java의 공유성을 강화하는 철학※ C언어에서는 default가 private → 보안성을 강화하는 철학 2019. 3. 20.