본문 바로가기

자바20

JAVA / Calendar와 Date 그리고 java.time패키지 Date는 날짜와 시간을 다룰 목적으로 JDK1.0부터 제공되어온 클래스이다. JDK1.0.이 제공하는 클래스의 수와 기능은 지금과 비교할 수 없을 정도로 빈약했다. Date클래스 역시 기능이 부족했기 때문에, 서둘러 Calendar라는 새로운 클래스를 그 다음 버전인 JDK1.1부터 제공하기 시작했다. 1. Calendar와 GregorianCalendar Calendar는 추상클래스이기 때문에 직접 객체를 생성할 수 없고, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다. Calendar cal = new Calendar(); // 에러!!! 추상클래스는 인스턴스를 생성할 수 없다. Calendar cal = Calendar.getInstance(); // Calendar 클래스를 구현.. 2020. 5. 30.
JAVA / 예외처리(exception handling) 1. 프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 이를 발생시점에 따라 '컴파일 에러'와 '런타임 에러'로 나눌 수 있는데, 글자 그대로 '컴파일 에러'는 컴파일 할 때 발생하는 에러이고 프로그램의 실행도중에 발생하는 에러를 '런타임 에러' 라고 한다. 이 외에도 '논리적 에러'가 있는데, 컴파일도 잘되고 실행도 잘되지만 의도한 것과 다르게 동작하는 것을 말한다. 예를 들어, 창고의 재고가 음수가 된다던가, 게임 프로그램에서 비행기가 총알을 맞아도 죽지 않는 경우가 이에 해당된다. 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 :.. 2020. 5. 28.
JAVA / 내부 클래스(inner class) 내부 클래스는 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다. 다만 앞으로 배우게 될 내부 클래스의 몇 가지 특징만 잘 이해하면 실제로 활용하는데 어려움이 없을 것이다. 내부 클래스는 사용빈도가 높지 않으므로 내부 클래스의 기본 원리와 특징을 이해하는 정도까지만 학습해도 충분하다. 실제로는 발생하지 않을 경우까지 이론적으로 만들어 내서 고민하지말자. 1. 내부 클래스란? 내부 클래스는 클래스 내에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 간단하다. 두 클래스가 서로 긴밀한 관계에 있기 때문이다. 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 .. 2020. 5. 27.
JAVA / 인터페이스 1. 인터페이스란? 인터페이스는 일종의 추상클래스다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용치 않는다. 앞서 추상클래스를 '미완성 설계도'라고 하였는데, 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다. 인터페이스도 추상클래스처럼 완성되지 않은 불완전한 것이기 때문에 그 자체만으로 사용되기 보다는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다. 2. 인터페이스의 작성 인터페이스를 작성하는 것은 클래스를 작성하는 것과 같다. 다만 키워드로 cl.. 2020. 5. 24.
JAVA / 추상클래스 1. 추상클래스란? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도란, 단어의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상메서드)를 포함하고 있다는 의미다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 갖는다. 새로운 클래스를 작성할 때 아무 것도 없는 상태에서 시작하는 것보다는 완전하지는 못하더라도 어느 정도 틀을 갖춘 상태에서 .. 2020. 5. 4.
JAVA / 다형성(polymorphism) 1. 다형성이란? 상속과 함께 객체지향개념의 중요한 특징 중의 하나인 다형성에 대해서 배워 보도록 하자. 다형성은 상속과 깊은 관계가 있으므로 학습하기에 앞서 상속에 대해 충분히 알고 있어야 한다. 객체지향 개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 이를 좀 더 구체적으로 말하자면, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. 아래 코드를 보자. class Tv { boolean power; // 전원상태(on/off) int channel; // 채널 void power() { power != power; } void.. 2020. 4. 24.
JAVA / 제어자 1. 제어자란? 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제어자와 그외의 제어자로 나눌 수 있다. 접근 제어자 : public, protected, default, private 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp 제어자는 클래스나 멤버변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있다. 즉, 하나의 대상에 대해서 public과 private을 함께 사용할 수 없다는 것이다. 💡 참고 제어자들 간의 .. 2020. 4. 22.
JAVA / package와 import 1. 패키지란? 패키지는 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로서 클래스를 효율적 관리할 수 있다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 자신만의 패키지 체계를 유지함으로써 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌하는 것을 피할 수 있다. 지금까지는 단순히 클래스 이름으로만 클래스를 구분 했지만, 사실 클래스의 실제 이름은 패키지명을 포함한 것이다. 예를 들면 String클래스의 실제 이름은 java.lang.String이다. java.lang패키지에 속한 String클래스라는 의미이다. 그래서 같은 이름의 클래스라도 서로 다른 패키지에 속하면 패키지명으로 .. 2020. 4. 6.
JAVA / 오버라이딩(Overriding) 1. 오버라이딩이란? 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우가 많다. 이럴 때 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 2차원 좌표계의 한점을 표현하기 위한 Point클래스가 있을 때, 이를 조상으로 하는 Point3D클래스, 3차원 좌표계의 한 점을 표현하기 위한 클래스를 다음과 같이 새로 작성하였다고하자. class Point { int x; int y; String getLocation() { return "x :" + x + ", y :"+ y; } } class Point3D extends Point { int z; String getLocation() { return "x :" + x + ", y :"+ y.. 2020. 4. 6.
JAVA / 상속 1. 상속의 정의 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 때문에 상속은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. 2. 상속 구현 방법 상속을 구현하기 위해선 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다. class Child extends Parent { // ... } 이 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래.. 2020. 4. 3.
JAVA / 생성자(Constructor) 생성자란? 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드' 이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다. 알아두기 인스턴스 초기화란, 인스턴스 변수들을 초기화하는 것을 말한다. 생성자 역시 메서드 처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다. 그렇다고 해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지는 않고, 단지 아무것도 적지 않는다. 생성자의 조건은 다음과 같다. 생성자의 이름은 클래스의 이름과 같아야 한다. 생성자는 리턴 값이 없다. 알아두기 생성자도 메서드이기 때문에 리턴값이 없다면 void를 함께 작성해주어야하는게 옳다고 생각되지만, 모든 생성자는.. 2020. 4. 3.
JAVA / 오버로딩이란 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야 한다. 그러나 자바에서는 한클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있는데, 이것을 우리는 오버로딩이라고 한다. 오버로딩을 지금부터 좀더 자세히 알아보자. 오버로딩 개념 오버로딩은 메서드 오버로딩이라고도 부르며, 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 말한다. 오버로딩의 사전적 의미는 '과적하다' 즉, 많이 싣는 것을 의미한다. 보통 하나의 메서드 이름에 하나의 기능만을 구현해야하는데, 하나의 메서드 이름으로 여러 기능을 구현하기 때문에 붙여진 이름이라 생.. 2020. 4. 3.
JAVA / 메서드(method) 프로그래밍을 하다보면 정말 많은 메서드를 만들어 사용한다. 객체지향언어인 JAVA에서도 객체의 수많은 기능을 위해 메서드를 자주 구현하곤 하는데, 이번 포스팅에서는 이러한 메서드가 무엇이며 어떻게 만들어 사용하는지 알아보고자한다. 메서드(method)란? 메서드는 객체의 기능을 수행하는 일련의 문장들을 하나로 묶어 놓은 것이다. 기본적으로 수학의 함수와 유사하며, 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다. 예를 들어 소수점 올림을 하는 메서드 Math.ceil()은 인자를 필요로하며, 4.5를 인자값으로 입력하면 5.0이라는 결과로 반환한다. 이러한 메서드는 때에 따라 입력값 또는 출력값이 없을 수 도 있으며, 심지어 입력값, 출력값 모두 없을 수 도있다. 일반적으로 메서드는 io(.. 2020. 4. 3.
JAVA / 클래스와 객체 독자분들은 자바를 한번이라도 접해보았다면 객체지향이라는 말을 들어봤을 것이다. 자바는 대표적인 객체지향언어 중 하나로서, 객체지향 프로그래밍(OOP)을 손쉽게 할 수 있다. 객체지향의 특징을 잠깐 언급하자면 다음과 같다. 코드의 높은 재사용성 코드의 관리가 용이 신뢰성이 높은 프로그래밍 가능 이러한 객체지향의 특징을 제고시킨 대표적 요소는 클래스와 객체이며, 지금부터 이 두가지 요소가 무엇인지 함께 알아보자. 클래스와 객체 그리고 인스턴스 클래스 : 객체를 정의해 놓은 것 또는 객체의 설계도 객체 : 실제로 존재하는 것 또는 사물 혹은 개념 인스턴스 : 어떤 클래스로부터 만들어진 객체 클래스 클래스란 '객체를 정의해놓은 것' 또는 '객체의 설계도 또는 틀" 이라고 정의할 수 있다. 클래스는 객체를 생성하.. 2020. 4. 3.
JAVA / 배열 배열이란? 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 말한다. 이 포스팅을 보시는 분들은 대게 현업경험이 아예없거나 있어도 조금 있으신 분들이라고 판단하고 여러 변수를 하나의 묶음으로 다루는 것이 왜 필요한지 예를 들어 보겠다. 만약 특정 프로그램을 개발하는데 같은 타입의 변수를 100개 정도 사용하겠다라고 가정해보자. 이러한 상황에서 배열이 없다면 우리는 변수 100개를 선언하여 사용하여야 한다. 벌써 상상만으로도 머리가 지끈거린다. 이럴 때 사용되는것이 바로 배열이며, 보다 손쉽게 방대한 데이터를 손쉽게 다룰 수 있다. 배열의 선언 및 생성 배열의 선언과 생성 방법 예시는 다음과 같다. // 배열 선언 int[] a; // 배열 생성 a = new int[3]; // 배열 선언 및 .. 2020. 3. 31.
JAVA / 캐스팅(형변환)이란? 프로그래밍을 하다보면 같은 타입뿐 아니라 서르 다른 타입간의 연산을 수행해야하는 경우도 발생한다. 이때 우리는 연산을 수행하기전 타입을 일치시켜야하는데 어떻게 해야할까? 함께 알아보자. 캐스팅(형변환)이란? 형변환 즉, 캐스팅이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다. 우리는 코드를 작성하다보면 수많은 연산과 마주한다. 이때 서로 연산되는 데이터끼리 타입이 맞지않으면 연산이 불가능하다. 따라서 데이터를 연산할 때에 데이터끼리의 타입을 맞춰주어야하는데 이때 우리는 캐스팅이라는 작업을 통해 연산 데이터들간의 타입을 일치시켜준다. 캐스팅 방법 캐스팅의 방법에는 묵시적 캐스팅과 명시적 캐스팅 2가지가 있다. 각각의 방법을 리터럴과 변수에 적용하여 살펴보자. 예시는 다음과 같다. // 변수.. 2020. 3. 30.
JAVA / 상수와 리터럴 프로그래밍을 하다보면 값이 변하지않는 데이터 공간에 대한 고민을 한번쯤 하게 된다. 그럴 땐 어떻게 해야할까? 그렇다. 변수가 아닌 상수를 활용하는 것이다. 그럼 상수가 무엇이고 언제 필요하며, 어떻게 선언하는 것인지 알아보자. 상수? 리터럴? 상수는 변수와 마찬가지로 ‘값을 저장할 수 있는 공간’ 이지만, 변수와 달리 한번의 값을 저장하면 다른 값으로 변경할 수 없다. 따라서 상수는 반드시 선언과 동시에 초기화해야 하며, 초기화한 이후부터 상수의 값을 변경하는 것이 허용되지 않는다. 리터럴은 대입연산자 기준, 우변에 작성되는 값 그 자체를 말한다. 해당 포스팅에서 상수와 엮어 헷갈릴 수 있겠지만 변수 또는 상수에 할당되는 값 그 자체를 리터럴이라고 이해하면된다. 상수 값을 한번만 저장할 수 있는 공간 .. 2020. 3. 27.
JAVA / 변수란 우리는 살아가면서 ‘변수’ 라는 용어를 간혹 들어봤을 것이다. ‘변수가 많네~’, ‘변수가 생길수도있어!’, ‘변수에 담아!’ 등 프로그래밍을 포함해 일상생활에서도 많이 쓰이곤한다. 이번 포스팅에서는 이러한 변수라는 용어가 프로그래밍 세계에서 어떤의미를 가지고 활용되는지 알아보자. 변수란? 프로그래밍 세계에서는 변수를 ‘단 하나의 값을 저장할 수 있는 메모리상의 공간’을 뜻한다. 이렇게 이름지어진 이유는 프로그래밍에서의 변수의 성질, 즉 ‘변수에 저장된 값은 변경될 수 있다’는 점이 수학에서의 ‘변하는 수’를 정의하고 있는 변수와 상통하고 있기 때문이다. 변수의 선언 및 초기화 변수 선언 프로그래밍에서 변수를 사용하기 위해선 선언을 해주어야한다. 변수 선언은 프로그래밍마다 다소 차이가 있는데 해당 포스팅.. 2020. 3. 23.
JAVA / JDK & JRE & JVM JDK? JDK는 Java Development Kit의 약자로 Java 애플리케이션을 만드는데 사용되는 소프트웨어 개발 환경이자 자바용 SDK이다. Java개발자는 JDK를 여러 OS환경에서 사용할 수 있으며, Java 프로그램을 코드화하고 실행하는데 사용한다. JDK에는 JAVA 프로그램을 작성하는데 필요한 도구와 이를 실행하는데 필요한 JRE가 포함되어 있으며, 컴파일러(javac), JAVA 애플리케이션 시작 프로그램, 애플릿 뷰어 등도 포함되어 있다. JRE? JRE는 Java Runtime Environment의 약자로 다른 소프트웨어를 실행하도록 설계된 소프트웨어의 일부이다. 여기에는 클래스 라이브러리, 로더클래스 및 JVM이 포함되어 있다. 간단히 말해, Java 프로그램을 실행하려면 JR.. 2020. 3. 20.
JAVA / 자바란? 자바는 썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다. 자바의 가장 중요한 특징은 운영체제에 독립적이라는 것인데, 이것은 특정 운영체제에 종속받지않고 운영체제 종류에 상관없이 실행이 가능함을 뜻한다. 때문인지 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로써 인터넷의 발전과 함께 많은 사용자층을 확보할 수 있었다. 또한 객체지향개념과 기존의 다른 프로그래밍언어, 특히 C++의 장점을 채택하는 동시에 잘 사용되지 않는 부분은 과감히 제외시킴으로써 비교적 배우기 쉽고 이해하기 쉬운 간결한 표현이 가능하도록 하였으며, 풍부한 클래스 라이프러리(Java API)를 통해 프로그래밍에 필요한 요소들을 기본적으로 제공하기 때문에 자바 프.. 2020. 3. 17.