내가 배운 JAVA를 정리해보자..
Java를 통해 로또 프로그램을 구현해보도록 하자.사용되는 메소드는 array, random, for 메소드 이다.1부터 45까지의 숫자 중 6개를 임의로 뽑는 소스이다.소스코드는 아래와 같다.package koreait.day8;import java.util.Arra
Java 에서 사용되는 데이터 타입에 대해 정리해보자.지금까지 게시물을 올릴 때, 실현되거나 시각화되는 결과물 위주로 올렸다.하지만 이번 게시물은 Java를 공부하면서 헷갈릴 수 있는 데이터 타입 유형에 대한 게시물을 올리려고 한다.데이터 타입의 크기데이터 타입별 범위
지난 게시물에 이어 Java 데이터 관련 헷갈릴 수 있는 부분을 정리해보자. (예제와 설명은 유튜브 생활코딩의 Java 입문강의를 참조하여 정리하였다.)자동 형 변환float a = 3.0;
연산자란, 특정한 작업을 하기 위해 사용하는 기호를 뜻한다.종류는 대입 연산자, 산술 연산자, 비교 연산자, 논리 연산자 등이 있다.헷갈릴 수 있는 부분만 정리해보자.단항 연산자 단한 연산자란 하나의 항을 대상으로 연산이 이루어지는 연산자를 의미한다.예시는 아래와 같다
비교 연산자는 관계 연산자라고도 한다. 프로그래밍에서 비교란 주어진 값들이 같은지 다른지 큰지 작은지를 구분하는 것을 뜻한다. 비교 연산자는 true or false 중 하나로 표현되며, true는 비교 결과가 참, false는 거짓을 의미한다. 아래 코딩 예시를 통
오늘은 Switch문에 대해 기록하려고 한다. Switch문을 이해하기 위해서는 if문과의 비교는 불가피하므로 if문 코드도 함께 적으며 이해해보자. 위는 if문의 코드 예제이다. 저 화면에서 처음 실행 시키면 아래와 같이 나온다. 실행화면에서 1번을 누르고 엔터키
반복문에 대해 몇자 기록하고자 한다.먼저, while 문에 대해 알아보쟈.위의 코드에서 괄호안 조건은 쉽게 말해 '언제까지 반복할 것이냐'의 의미이다.그리고 조건 다음의 중괄호 { }안에는 반복적으로 실행하고자 하는 내용이 들어간다.즉, 조건식이 참인 동안 중괄호 안의
배열(Array)이란 연관된 정보를 그룹화하는데 사용한다. 정의예시를 통해 알아보자. "김성언", "언성김", "성언킴" 이라는 값들은 문자열이라는 데이터 값이다. 위 데이터값 문자열을 class라는 그룹에 정의한 것이다. 즉, String 대괄호\[] class 이
위의 for문 내 콜론 : 뒤에 따라오는 class의 데이터값들을 하나씩 e에 담아주도록 약속된 것이다. 즉, class의 배열 안의 데이터 값들을 하나씩 e에 넣고 출력 되는 것이다. 따라서 출력값은 김성언은 최고입니다. 언성김은 최고입니다. 성언킴은 최고입니다.
위의 코드에서 \*\* 표시를 한 main 부분이 메소드이다.메소드의 정의와 호출위의 코딩이 '정의'이고위의 코딩이 '호출'이다. 첫번째 코딩에서 numbering() 다음의 중괄호{}안에서 정의된 내용이 밑의 두번째 코딩에서 numbering()으로 호출되는 것이다
메소드의 입력값과 출력값에 대해 알아보자.입력값 매개변수와 인자값public static void class() { int limit = 5; int i = 0; while ( i < limit ) { System.out.println(i);
애플리케이션에 입력값을 전달하여 어떻게 출력할 수 있을지를 고민해보자.String\[] args 위의 코드처럼 main이라는 메소드의 파라미터이다. 파라미터는 메소드로 들어오는 입력값이다. 아래 출력값에서 args.length는 args라는 배열이 몇개의 값을 담을 수
객체지향 언어인 Java를 공부하는만큼, 클래스, 인스턴스 그리고 객체에 대하여 알아보도록 하자.개념 및 정리 클래스(Class) : 객체를 만들기 위한 설계도. 인스턴스(Instance) : 객체를 만들기 위한 제품. 객체(Object) : 코드를 통해 이해
메소드 위의 코드를 보면, sum이라는 메소드는 static이라는 키워드를 달게 되면, sum은 클래스 소속의 메소드가 된다. static이 붙어있는 클래스 메소드는 static이 붙어있지 않은 메소드와 다르게 클래스에 접근하여 직접적으로 실행할 수 있다. 위의 코드를
Java에서 유효범위란, 프로그램이 커질때 여러가지 이유로 변수 혹은 이름이 충돌할 수 있다. 이를 해결하기 위해 고안된 개념이다. 스코프(Scope)라고도 부른다. JavaScript에서도 활용되는 개념이고, 해당 변수가 접근할 수 있는 변수, 객체 그리고 함수의
유효범위에 대해 알아보는 중이다...만약 당신이 한번은 전역변수를, 다른 한번은 지역변수를 출력하고 싶을 때 코딩은 어찌해야할까.아래 코드를 확인해보자.위의 코드를 실행하면2010이렇게 출력된다.여기서 this는 인스턴스를 생성했을때, 인스턴스 자체를 의미하는 것이 t
위의 코드를 보면클래스인 Calculator와 똑같은 이름의 메소드 Calculator가 있다. 이를 생성자(Constructor)라고 한다.생성자의 기능은 이 클래스가 생성될 때, 자동으로 클래스와 똑같은 이름을 가지고 있는 생성자가 실행되도록, 동시에 어떤 메소드보
상속의 개념기존의 객체를 그대로 유지하면서 어떤 기능을 추가하는 방법을 고안하다가 등장한 개념이 바로 상속이다.기존의 객체를 수정하지 않으면서 새로운 객체가 기존의 객체를 기반으로 만들어지게 되는 것이다. 동시에 새로운 객체가 이미 존재하는 객체의 기능을 가지고 있을
기본 생성자 생성자는 객체를 생성한다. 그 과정에서 해야 할 일들을 생성자 메소드에 지정해서 초기화 작업을 할 수 있다. 위의 코드는 에러가 발생하지 않은 깔끔한 코드다. ConstructorDemo 객체를 생성할 때 자동으로 생성자를 만들어주기 때문이다. 위
상속은 상위 클래스의 기능을 하위 클래스에게 물려주는 기능이다.이때 하위클래스는 상위 클래스의 메소드를 주어진 그대로 사용해야한다면 제약이 상당할 것이다. 이런 제약을 벗어나려면 하위 클래스가 부모 클래스의 기본적인 동작 방법을 변경할 수 있어야 할 것이다. 이를 위
오버로딩(overloading)의 정의코드를 작성할때 기존의 계산기는 2개의 값(left, right)에 대한 연산(sum, avg) 만을 수행 할 수 있게 작성하였다고 가정하자. 그런데 만약 3개의 값을 대상으로 연산을 해야 한다면 어떻게 해야할까? 아래 코드를 참고
IT관련 개념이 되었든Java 와 관련된 개념이 되었든갑자기 알게되거나 접하게된 지식이 있으면바로 기록하려고 한다.오늘은 Java의 프로젝트 디렉터리 구성에 대해서 알아보자.eclipse에서 작업한 Java 파일들이 어디로 가는지 살펴보면위와 같이 day2 이라는 패키
자유와 규제프로그래밍 도구의 기본적인 목표는 생각하는 것을 자유롭게 표현할 수 있게 하는 것이지만, 이를 위한 다양한 규제가 필요하다.지금까지 내가 배운 것 중에는 데이터 타입이 규제에 해당한다.추상클래스, final, 접근 제어자, 인터페이스 등도 규제에 해당한다.접
접근 제어자에는 public과 private외에 두 가지가 더 있는데, protected와 default다. 1) protected : 상속관계에 있다면 서로 다른 패키지에 있는 클래스의 접근도 허용한다. 2) default : 접근 제어 지시자가 없는 경우를 의미
지금까지 살펴본것은 클래스 멤버에 대한 접근 제어자이고, 이번에는 클래스의 접근 제어자에 대해 알아보자.클래스의 접근 제어자는 패키지와 관련된 개념이다. 클래스의 접근 제어자는 public과 default이다. 접근 제어자가 public인 클래스는 다른 패키지의 클래
abstract는 상속을 강제하는 일종의 규제이다. 즉, abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이다.문법적인 측면package org.opentutorials.javatutorials.abstractclass.exa
추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제다. final 필드 필드와 변수는 같은 의미다. 실행되는 과정에서 한번 값이 정해진 이후에는 변수 내의 값이 바뀌지 않도록 하는 규제다. 아래 코드를 통해 구체적으로 알아보자. final
인터페이스(interface)를 알아보자. 문법과 개념 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 애플리케이션은 컴파일 조차 되지
메소드와 다형성 다형성이란, 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 아래 코드 예시를 통해 이해해보자.package org.opentutorials.javatutorials.polymorphism;class A{}class
하위 클래스를 인터페이스화 시킬 때, 그것의 데이터타입으로 상위클래스를 설정할 수 있다고 배웠다. 이와 마찬가지로 내가 만든 인터페이스가 있다고 가정하고, 그 인터페이스를 어떤 클래스가 구현했다고 보자. 그 클래스를 인스턴스화 시킬때 그 인스턴스화된 변수의 데이터타입
예외(Exception)란, 프로그램을 만든 프로그래머가 상정한 정상적인 처리에서 벗어나는 경우에 이를 처리하기 위한 방법이다.try - catch 문아래 코드를 통해 계산 코드에 오류가 발생한 사례를 파악해보자.위의 코드를 실행시키면 오류 메세지가 아래 처럼 뜬다.위
다양한 예외들위 코드는 아래와 같이 오류가 나온다. 오류가 나온 이유는 배열에 담긴 값이 3개인데, 10번째 값을 호출하고 있으므로 오류가 생기는 것이다. 즉, 존재하지 않는 값을 가져오려고 시도했으므로 ArrayIndexOutOfBoundsException 가 발생
오늘은 Java 예외 기능 중 finally에 대해 알아보자.try { 예외의 발생이 예상되는 로직} catch (예외클래스 인스턴스) { 예외가 발생했을 때 실행되는 로직} finally { 예외여부와 관계없이 실행되는 로직}아래 예시 코드를 통해 더 자세히 알아보자
생활코딩님께서는 '예외 던지기'라고 소개했던 부분을 설명해보자.왜 던지기 라는 단어로 소개하는가봤더니, 외부에 있는 파일 하나 생성해서 이클립스 프로젝트내 기입해놓고 불러오고자 할때, 그 파일 호출 과정을 수행할 수 없어서 이를 위한 처리를 생성자의 사용자에게 위임하
예외의 생성자 지금까지 배운 것은 API의 소비자로서 API측에서 던지는 예외를 처리하는 방법이다. 하지만 이제는 API의 생상자로서 내 프로그램을 이용하는 소비자들에게 예외처리를 제공하는 방법을 알아보자. 역시 코드 예시를 통해 알아본다.package org.open
나만의 예외 만들기표준 예외 클래스로도 많은 예외 상황을 표현할 수 있다. 하지만 그렇지 않은 경우도 있을 것이다. 이런 때는 직접 예외를 만들면 된다.예외를 만들기 전에 해야 할 것은 자신의 예외를 checked로 할 것인가? unchecked로 할 것인가를 정해야
소개위의 코드는 아래 코드와 같은 코드다.어떤 클래스를 정의했는데, 그 클래스가 아무런 클래스도 상속하고 있지 않다면Java는 암시적으로 extends Ojbect()를 정의한다.Object는 모든 클래스의 조상이라고 할 수 있는데, 이는 모든 클래스가 공통으로 포함하
오늘은 객체 지향에서 equals에 대해 알아보자.아래 코드를 살펴보자.위 코드의 실행결과는 다음과 같다.falsetrueobject는 student의 부모타입인데, 이걸 풀어서 설명하면Object라는 데이터 타입에 obj라는 변수에 s2의 변수를 대입하려고 하는데,
clone은 복제라는 뜻이다. 어떤 객체가 있을 때 그 객체와 똑같은 객체를 복제해주는 기능이 clone 메소드의 역할이다. 우선 clone이라는 메소드를 통해 복제를 할 수 있는데, 그 복제하려는 객체가 복제 가능한 객체라는 사실을 Java에게 알려줘야 한다.clon
위와 같은 로직에서 숫자 1에 해당하는 과일은 언제나 사과여야 한다. 그러므로 변하지 않는 값인 상수값에 따라서 그 값에 해당하는 과일의 의미를 고정하고 있다. 그런데 주석으로 상수의 의미를 전달하고 있지만 주석이 없어졌거나, 주석이 상수를 사용하는 코드와 멀어진다면
Fruit와 Company 클래스를 만들고 클래스 변수로 해당 클래스의 인스턴스를 사용하고 있다. 각각의 변수가 final이기 때문에 불변이고, Static이므로 인스턴스로 만들지 않아도 된다. 결과는 17행에서 에러가 발생한다. 이것이 우리가 바라던 것이다. 서로
enum은 클래스이므로 생성자를 가질 수 있다. 그러나 enum의 생성자는 접근 제어자 private만을 허용한다. 이때 방식이 좀 특이한데 아래 코드를 살펴보자.또한 열거형은 메소드를 가질 수 도 있다.아래 코드는 위의 코드와 다르지만 동일한 결과를 출력한다.그리고
참조아래 코드를 먼저 살펴보자.위 코드의 결과는 아래와 같다.runValue, 1runReference, 2 a에 1을 대입하고, 1을 복제하여 b에 담았다. 변수 a와 변수 b의 데이터 타입은 A이다. 이때 인스턴스 A가 생긴다. b가 생성되면서 인스턴스 A를 가지
참조와 복제를 비교해보자. 복제는 파일을 복사하는 것이고 참조는 심볼릭 링크(symbolic link) 혹은 바로가기(윈도우)를 만드는 것과 비슷하다. 원본 파일에 대해서 심볼릭 링크를 만들면 원본이 수정되면 심볼릭 링크에도 그 내용이 실시간으로 반영되는 것과 같은 효
위 코드의 결과는 아래와 같다.runValue, 1 메소드 value의 인자로 a를 전달했다. 인자 a는 매개변수 b가 되어서 value 안으로 전달되고 있다. value 안에서 b의 값을 변경했다. value가 실행된 후에 runValue에서 a값을 출력해본 결과 값
도입제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.먼저 아래 코드를 살펴보자.위 코드를 아래와 같은 그림으로 표현할 수도 있다. p1.info와 p2.info의 데이터 타입은 각각 String과 StringBuilder
(1) 복수의 제네릭아래 코드를 살펴보자. 복수의 제네릭을 사용할 때는 <T, S>와 같은 형식을 사용한다. 여기서 T와 S 대신 어떠한 문자를 사용해도 된다. 하지만 묵시적인 약속(convention)이 있기는 하다. 위 코드는 오류를 발생시키는데 아래 코드를
extends를 통해 제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있다.erson의 T는 Info 클래스나 그 자식 외에는 올 수 없다.extends는 상속(extends)뿐 아니라 구현(implements)의 관계에서도 사용할 수 있다.
컬렉션즈 프레임워크(Collections framework)란, 컨테이너라고도 부른다. 즉 값을 담는 그릇을 의미한다. 그런데 그 값의 성격에 따라서 컨테이너의 성격이 조금씩 달라진다. Java에서는 다양한 상황에서 사용할 수 있는 다양한 컨테이너를 제공하는데 이것을
iterator는 반복자다. collections 의 클래스들이 공통적으로 가지고 있는 API다. 컨테이너에 담긴 값들을 하나씩 꺼내서 하나 하나 기능을 처리할 수 있도록 한다. 아래 코드를 통해 자세히 알아보자. iterator는 hasNext와 next라는 메소드
아래 코드를 통해 Map 컬렉션을 알아보자. Map에서 데이터를 추가할 때 사용하는 API는 put이다. put의 첫번째 인자는 값의 key이고, 두번째 인자는 key에대한 값이다. key를 이용해서 값을 가져올 수 있다. Map에 저장된 데이터를 열거할 때는 아래처