일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Jenkins
- https://start.spring.io
- start.spring.io
- maven
- 제네릭
- 내장객체
- 스프링
- 싱글톤
- bootstrap
- 루프
- wrapper
- Short
- dependency
- 자동형변환
- 메소드
- 인텔리제이
- 클래스
- unboxing
- 싱글턴
- 빌드
- 제너릭
- boxing
- 언박싱
- Java
- Scanner
- 콜렉션
- suvlet
- 컬렉션
- 무한
- 박싱
- Today
- Total
목록K-DigitalTraining 강의/1. Java (102)
Developer Gonie
* 이 기능은 보통 입력받아야 하는 값이 아닌것을 입력받았을 때, 예외를 강제로 발생시켜 처리시킬 목적으로 사용되는듯 하다. 코드 import java.util.InputMismatchException; import java.util.Scanner; public class Ex07_05_예외처리_난수 { public static void main(String[] args) { int answer = (int)(Math.random()*100) + 1; // 이 라인은 1 input) { System.out.println("더 큰수를 입력하세요"); } else if(answer < input) { System.out.println("더 작은수를 입력하세요"); }else { System.out.print..
* 예외를 다룰 때 throws 의 기능 실행중 호출되는 서브함수에서 예외가 발생할 예정이라고 하자. 원래는 예외가 발생한 서브함수에서 try-catch로 예외를 처리해 주었는데 throws를 이용하면 발생한 예외를 호출된 쪽에서 처리할 수 있다. 즉, 예외는 서브함수에서 발생하더라도 서브함수가 호출된 main함수에서 try-catch로 예외를 처리해 줄 수 있는 것이다. 코드 public class Ex07_04_예외처리 { public static void main(String[] args) { try { sub(); } catch (ArithmeticException e) { System.out.println("main에서 예외처리"); } } static void sub() throws Arith..
* 예외(Exception)처리란? 에러에는 컴파일 중 발생하는 '컴파일에러'와 실행 중 발생하는 '런타임에러'가 있다. '컴파일에러' 는 코드상의 오타 등의 에러이고, '런타임에러'는 배열에서 크기를 벗어난 접근을 하는 것과 같은 에러이다. 그런데 '런타임에러'에는 '에러'와 '예외'가 존재한다. '에러'는 메모리 부족 등의 프로그램 코드에 의해 수습될 수 없는 오류이고 '예외'는 프로그램 코드에서 수습될 수 있는 다소 미약한 오류이다. try-catch문이 다루는 예외는 바로 이것이다. '런타임에러'에 속하는 '예외' * 예외(Exception)처리를 왜 해주는가? 프로그램 실행시 예외가 발생하게 되면 프로그램이 강제로 비정상 종료되어 버리는데, 발생할 수 있는 예외에 대비한 코드를 작성해두면 도중에..
아래의 예시는 Phone 클래스를 만드는데, 폰의 특성은 Shape2 클래스로 상속받고, 기능은 인터페이스 여러개로 상속받는 예제이다. 코드 interface Camera{ void takePhoto(); // 인퍼페이스 안에있는 메서드라면 자동으로 public abstract 가 앞에 붙음 } interface Music{ void playMusic(); } interface DBM{ void viewTV(); } class Shape2{ private int size; private String color; Shape2(){ } Shape2(int size, String color){ this.size = size; this.color = color; } int getSize() { return si..
* 인터페이스란? 겉으로 보여지는 기능은 추상클래스와 같게 내부 구현을 숨기고 기능만 표시하기 위한 추상화를 위한 추상메소드를 가진다. 따라서, 기능은 추상클래스와 거의 비슷하다고 할 수 있다. 인터페이스도 클래스이지만 작성할 땐 class가 아닌 interface 키워드를 사용한다. 그런데, 둘의 역할이 같다면 모두 존재할 이유가 없지 않은가? 이 때문에 영어로 다음과 같이 영어로 추가 검색을 실시하였다. "when use abstract class and interface in java" "difference between abstract class and interface in java" 이 결과로 얻게된 정보는 한줄로 정리할 수 있는 심플한 것이 아니었다. 둘 다 이런 저런게 공통적으로 가능하지만..
* 추상클래스란? 추상클래스는 하위 클래스가 반드시 만들어야할 것에 대해 미완성된 밑그림을 그려두는 것과 같은데, 이를 사용하는 목적중 하나는 다음과 같다. 개발 프로젝트에서 설계자와 코더는 일반적으로 다른사람인데, 설계자의 입장에서 추상 클래스로 설계 규격을 만들어 두는 것이 좋다. 코더에게 추상 클래스를 상속해서 구체적인 클래스를 만들도록 지시하면 되기 때문이다. 주요 사용 목적은 이름대로 추상화를 위해 쓰인다. 추상메소드를 가질 수 있다는점, 추상화를 위해 쓰인다는점, 미완성 상태라서 이것만으로는 객체를 생성할 수 없다는 점, 추상클래스 타입의 참조변수는 자식클래스 객체들의 주소를 담을 수 있다는 점(다형성)에서 인터페이스와 매우 유사한데, 둘에는 구분되는 큰 차이도 있으니 이 둘의 차이를 잘 알아..
* 업캐스팅, 다운캐스팅이 구체적으로 어디서 이뤄지는지. 그리고 보통 다운캐스팅을 어느 상황에서 수행하는지 이를 중점으로 살펴보면 좋을거같다. 코드 class Robot { } class DanceRobot extends Robot { void dance() { System.out.println("춤을 춥니다."); } } class SingRobot extends Robot { void sing() { System.out.println("노래를 합니다."); } } class DrawRobot extends Robot { void draw() { System.out.println("그림을 그립니다."); } } public class Ex06_10_다형성 { public static void main(..
* 다형성이란? 다형성은 어느 특정한 요소가 다양한 자료형에 속할 수 있는 성질을 말한다. 프로그래밍 언어가 이 성질을 구현해 낼 수 있도록 지원한다면, 중복되는 코드의 양을 줄일 수 있게 된다. 다형성이 존재한다면 하나의 참조변수로 다양한 타입의 객체들을 다루는 것이 가능해지는데 이를 이용하면 코드 작성이 더욱 간략해진다. 혹은 공통 특성으로 타입을 추상화하면 하나의 코드로 여러 타입의 객체를 다룰 수 있게 된다고 말 할 수 있겠다. 자바는 다형성이 가능해지도록 자식클래스 객체의 참조변수가 부모클래스의 타입으로 변환되는 것을 허용하는데, 이는 상속 관계일 때만 가능하다. 자바에서의 다형성을 이용한 한가지 예시로 Parent 클래스의 참조변수가 Child 클래스 객체의 주소를 가리키고 있는 경우가 있다...
* java.util.* 방식으로 java 폴더 아래 util 폴더 안에 들어있는 클래스를 전부 한 번에 추가 가능. 와일드카드 적용은 클래스 이름에만 적용 가능하다는 것도 알아두자. * System, Math 같은 클래스는 java.lang 패키지 안에 들어있는 클래스인데 java.lang 패키지는 컴파일러가 자동으로 import 해주어 따로 import 해주지 않아도 이 안에 포함되어 있는 클래스는 바로 사용할 수 있다. * import를 하지 않고 아래와 같이 패키지를 구체적으로 명시해주는 방식으로 클래스를 사용할 수 있기도 하다. 다만 import를 해주면 패키지 이름을 붙이지 않고도 호출이 가능해지는 편리함이 생김. ex) java.lang.System.out.println(java.lang.M..
* 패키지란? 폴더의 개념이다. 관련있는 것들을 하나로 모아두고 관리할 때 패키지를 사용한다. 지금까지는 보통 src 폴더에 클래스를 생성해 왔는데, 이 경우엔 defualt 패키지(폴더)에 모두 그 클래스들이 저장되는 형식이었다. 그런데, 이와 다르게 비슷한 클래스들을 하나로 모아두고 관리하고 싶다면 패키지를 생성해 여기에 저장해두고 import 해서 접근하는 방식을 사용할 수도 있다. 다른 패키지의 클래스, 그리고 그 내부의 생성자, 멤버함수를 public으로 만들어야 하는 이유 * 다른 패키지에 존재하는 클래스, 그리고 그 내부의 메서드, 생성자를 defualt 접근제어자로 정의했다면, 현 클래스에서 접근이 불가능하므로 이들을 모두 public으로 변경해줘서 정상적으로 접근이 가능하도록 하자. 이 ..
public - 접근가능한 경우 -> 누구나 protected - 접근가능한 경우 -> 같은패키지 + 패키지가 다르더라도 자식클래스 default - 접근가능한 경우 -> 같은패키지 private - 접근가능한 경우 -> 전부 불가, 오직 getter, setter 로 내부의 멤버변수에 접근가능한 접근제어자
* 다른 클래스의 멤버변수를 사용하고 싶을 때 주로 상속을 이용하긴 하지만 포함관계 방식을 이용하기도 한다. 코드 아래는 Stu클래스가 Per 객체를 포함하고 있는 관계에 대한 예시이다. 이런경우 Per 객체의 멤버변수에 접근하고자 한다면 이중으로 타고 들어가야 접근이 가능하다. class Per{ String name; int age; Per(String name, int age){ this.name = name; this.age = age; } }//Per class Stu { int kor, eng, math; Per p; // Per 객체를 포함. Stu(String name, int age, int kor, int eng, int math){ p = new Per(name, age); this...