일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자동형변환
- 언박싱
- unboxing
- bootstrap
- Scanner
- Jenkins
- 빌드
- 컬렉션
- 내장객체
- 제너릭
- dependency
- 콜렉션
- wrapper
- Short
- 무한
- 스프링
- 루프
- 싱글톤
- 제네릭
- start.spring.io
- 클래스
- 박싱
- https://start.spring.io
- maven
- 메소드
- 인텔리제이
- 싱글턴
- suvlet
- boxing
- Java
- Today
- Total
목록분류 전체보기 (447)
Developer Gonie
* 이너클래스(=중첩클래스, Nested class) 란? 클래스 내부에 선언한 클래스를 말함. 클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나, 특정 클래스 하고만 관계를 맺을 경우에는 관계클래스 내부에 선언하는 것이 좋다. 이너클래스 관련해서 주의할 점으로 이너클래스 타입의 객체는 바로 new 를 이용해 객체를 생성하는 것이 불가능 하다. 그 이유는 이너클래스의 생성자에 바로 접근이 불가하기 때문인데 그래도 방법은 있다! 바깥 클래스의 객체를 생성하여 이너클래스의 생성자에 접근하면 아래와 같이 객체를 생성하는 것이 가능하다 Car2 pride = new Car2("프라이드", 2005, "파랑"); Car2.Car2name pride2 = pride.new Car2name..
* 0
* 이 기능은 보통 입력받아야 하는 값이 아닌것을 입력받았을 때, 예외를 강제로 발생시켜 처리시킬 목적으로 사용되는듯 하다. 코드 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 클래스 객체의 주소를 가리키고 있는 경우가 있다...
* 아래에서 핵심 과정은 5번과 6번 git이 관리할 대상으로 파일 등록 1. 등록시킬 파일을 생성 : vim 파일이름 2. 아무내용 입력하고 저장 및 종료 - 파일이 생성되어 열린다음의 첫 상태는 명령어를 입력받는 상태라서 문서에 텍스트를 입력할 수 없는데, 'i'를 입력 후 엔터를 치면 입력모드로 진입하여 문서를 편집할 수 있다. - 이후 파일에 "source : 1"를 입력후 저장해보자. 다시 명령어를 입력받는 모드로 돌아가고 싶다면 ESC를 눌러주면 된다. 명령어를 입력받는 상태에서 ":wq"를 입력하면 저장후 종료까지 가능 3. 파일 내용 출력해보기 - cat 파일명 or vim 파일명 4. git status 명령어를 입력해보기 - Untracked files : f1.txt, 의미 그대로 해..
* 아래에서 핵심 과정은 3번과 5번 저장소(Repository)만들기 1. 현재위치 확인 : pwd - 현재 위치는 C\Users\DG 폴더 안이라는 것을 의미한다. 2. 위치 이동 : cd 폴더이름 - C\Users\DG -> C\Users\DG\Document 3. 폴더 생성 : mkdir 이름 - git from the hell 의 약자로 gitfth 이름을 가진 폴더 생성 4. 만든 폴더 안으로 이동 : cd 폴더이름 5. 현재 위치의 폴더를 repository(저장소 or 작업장?)로 사용할 것을 알리기 : git init - 현재위치 폴더의 위치에서 버전관리를 시작하겠다 라는 것을 알리는 git의 명령어로 init 이 있음. - 초기화 되었다는 말과 함께 숨김폴더 .git 폴더가 생겨나는데,..