일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HashMap
- java #조건문 #if조건문 #if
- java #자바 #상속 #오버라이딩
- java #객체지향 #자바
- java
- 인텔리제이
- 자바 #JAVA
- java #자바 #상속
- 메서드
- 스프링 #Spring #spring #입문서
- IntelliJ
- 이펙티브자바
- overring
- 자바
- java #중첩반복문 #구구단
- Arrays.toString()
- java #continue #반복문
- 자바 #변수 #java
- java #자료형
- 자바 #java #상속
- java #조건문 #if문
- 객체지향프로그램
- 해쉬맵
- 람다
- Math.sqrt()
- Math.pow()
- java # for문 #반복문
- EffectiveJava
- 믹스인
- Mixin
- Today
- Total
목록Java (37)
산으로 가자▲
Enum, 자바의 열거타입 이 글은 자바의 열거 타입인 enum에 대해서 설명합니다. enum이 무엇이고, 어떻게 사용하며, 어떠한 구조를 갖는지 살펴봅니다. 학습 목표 · 열거 타입이란? · enum 정의하는 방법 · enum 사용하기 · java.lang.Enum · enum이 제공하는 메소드 · EnumSet 열거 타입이란? 서로 연관된 상수의 집합을 저장하는 자료형 데이터 중에는 몇 가지로 한정된 값만을 갖는 경우가 있다. 예들 요일에 대한 데이터(월화수...)는 7개의 값만을 갖고, 계절에 대한 데이터(봄여름...)는 네 개의 값만을 갖는다. 이와 같이 한정된 값만을 갖는 데이터 타입이 열거 타입(enumeration type)이다. enum 정의하는 방법 열거 타입(enum)을 정의하기 위해는..
Enum 클래스 열거체(enumeration type) C언어와 C++에서는 열거체를 사용할 수 있지만, JDK 1.5 이전의 자바에서는 열거체를 사용할 수 없었습니다. 하지만 JDK 1.5부터는 C언어의 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있습니다. 이와 같은 자바의 열거체는 다음과 같은 장점을 가집니다. 1. 열거체를 비교할 때 실제 값뿐만 아니라 타입까지도 체크합니다. 2. 열거체의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없습니다. 열거체의 정의 및 사용 자바에서는 enum 키워드를 사용하여 열거체를 정의할 수 있습니다. 문법 enum 열거체이름 { 상수1이름, 상수2이름, ... } 예제 enum Rainbow { RED, ORANGE, YELLOW, ..
이번에는 공변과 불공변에 대해서 먼저 알아보고, 이후에 제네릭과 와일드카드에 대해 알아보도록 하겠습니다. 많은 분들이 어려워하는 제네릭인 만큼 쉽게 풀어서 설명하려고 노력했는데, 많은 도움이 되기를 바라겠습니다. 1. 공변과 불공변 [ 공변과 불공변 ] 제네릭과 와일드카드에 대해 이해하기 위해서 우리는 먼저 공변과 불공변에 대해 알아야 한다. 공변과 불공변은 각각 다음과 같다. 공변(covariant) : A가 B의 하위 타입일 때, T 가 T의 하위 타입이면 T는 공변 불공변(invariant) : A가 B의 하위 타입일 때, T 가 T의 하위 타입이 아니면 T는 불공변 대표적으로 배열은 공변이며, 제네릭은 불공변인데 이를 코드로 살펴보도록 하자. 예를 들어 배열의 요소들을 출력하는 메소드가 있다고 하..
자바는 OS에 독립적인 특징을 가지고 있다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하자. #자바 컴파일 순서 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일합니다. 이때 나오는 파일은 자바 바이트 코드(.class)파일로 아직 컴퓨터가 읽을 수 없는 자바 가상 머신이 이해할 수 있는 코드입니다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있습니다. 컴파일된 바이크 코드를 JVM의 클래스로더(Class Loader)..
Java는 사용자 정의 메소드 및 생성자와 연관된 매개변수 개념을 제공합니다. Java에서 사용자 정의 메소드와 생성자는 0개, 하나 또는 둘 이상의 매개변수를 사용할 수 있습니다. 여기 쿼리는 Java의 매개 변수가 무엇입니까? 잘! Java의 매개변수는 메소드 또는 생성자에 전달할 수 있는 변수이며 byte, string, int, float 등과 같은 모든 데이터 유형이 될 수 있습니다. Java에서 메소드/생성자는 단일 또는 다중 매개변수를 사용할 수 있습니다. 이 문서에서는 아래 나열된 개념에 대한 심층적인 이해를 제공합니다. 자바의 매개변수란? Java의 매개변수와 인수 예 결론 시작하겠습니다! 자바의 매개변수란? Java의 매개변수는 메소드 또는 생성자에 전달할 수 있는 변수입니다. 이러한 ..
instanceof - instanceof는 객체 타입을 확인하는 연산자이다. - 형변환 가능 여부를 확인하며 true / false로 결과를 반환한다. - 주로 상속 관계에서 부모객체인지 자식 객체인지 확인하는 데 사용된다. instanceof의 기본 사용방법은 "객체 instanceof 클래스" 를 선언함으로써 사용한다. 다음 예제로 어떤 구조인지 파악해 보자 class Parent{} class Child extends Parent{} public class InstanceofTest { public static void main(String[] args){ Parent parent = new Parent(); Child child = new Child(); System.out.println( pa..
반복문과 java.util.Arrays의 toString() 메소드를 이용하여 배열의 값을 출력하는 방법을 소개합니다. 먼저, 그냥 배열의 값을 출력해 볼까요? [ 코드 ] public class PrintArray { public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; System.out.println(arr); // ?? } } [ 결과 ] [I@762efe5d 위와 같이 그냥 배열 변수(arr)를 출력하면 알수 없는 값이 출력됩니다. 아마도, 여러분들이 위 코드를 돌리면 저와는 또 다른 값이 출력될 것입니다. 왜냐하면, 여기서 출력된 값은 arr라는 변수가 가리키고 있는, [1, 2, 3, 4, 5] 값이 들어있는 메모리의..
String -> int (문자열을 숫자로) String 문자열을 int로 변환하기 위해서는 java.lang.Integer 클래스의 parseInt()와 valueOf() 메소드를 사용할 수 있습니다. Integer.parseInt() static int parseInt(String s) java.lang.Integer 클래스의 static 메소드인 parseInt() 메소드는 파라미터로 숫자로 변환할 문자열을 입력받고, 입력받은 문자열을 integer로 변환한 int 값을 리턴합니다. 코드 public class StringToInt { public static void main(String[] args) { String str1 = "123"; String str2 = "-123"; int int..
람다함수란? 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어입니다. 현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람다 대수이다. 람다 대수는 간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법입니다. 람다의 특징 람다 대수는 이름을 가질 필요가 없다. - 익명 함수 (Anonymous functions) 두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 될 수 있다. - 커링 (Curring) 익명함수? 익명함수란 말그대로 함수의 이름이 없는 함수입니다. 익명함수들은 공통으로 일급객체(First Class citizen)라는 특징을 가지고 있습니다. 이 일급 객체란..
해시맵(HashMap) 해시맵은 이름 그대로 해싱(Hashing)된 맵(Map)입니다. 여기서 맵(Map)부터 짚고 넘어가야겠죠? 맵이라는 것은 키(Key)와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조입니다. 여기서 키는 맵에 오직 유일하게 있어야합니다. 즉, 같은 맵에 두 개 이상의 키가 존재하면 안된다는 것입니다. 이름 그대로 열쇠이기 때문에 그 열쇠로 짝인 값(Value)를 찾아야하기 때문입니다. 값은 중복된 값이어도 상관이 없습니다. HashMap과 사용법이 거의 동일한 컬렉션(Collection)에는 Hashtable이 있습니다. 두 클래스의 차이점은 Thread 관점에서 안전하냐(Hashtable), 안전하지 않은 대신 속도가 빠르냐(HashMap)입니다. 여기서는 Thread-Sa..
객체지향(OOP) 무엇인가? 컴퓨터 프로그래밍의 패러다임 중 하나인 절차지향(C)언어에서는 각 명령어의 실행 순서를 기반으로 동작한다. 하지만 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 데이터와 이를 처리하는 루틴들을 하나의 독립된 객체로 동작한다. 이를 통해 재사용성의 증가라는 이점이 생기며 큰 프로젝트에 많이 사용된다. 1. 추상화 (Abstraction) 대상의 특성 중 불필요한 부분을 무시하고 필요한 공통점만을 다룬다. 그래서 현실의 복잡성을 극복하고 목적에 집중 할 수 있도록 하는 것이다. 복잡성을 다루기 위한 추상화의 2가지 차원 [1] 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통한 단순화 [2] 중요한 부분의 강조를 위해 불필요한 세부 사..
쓰레드(Thread)란 무엇인가? 쓰레드란 프로그램(프로세스) 실행의 단위이며 하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다. 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다. 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며 실행 상태가 변할때마다 쓰레드 문맥교환(context switching)을 수행한다. 각 쓰레드별로 자신만의 스택과 레지스터를 가진다. 한순간에 하나의 쓰레드만이 실행 가능하다. 프로세스와 쓰레드의 차이 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다. 프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. ..
믹스인이란? 객체지향언어에서 다른 클래스에서 '사용'할 목적으로 만들어진 클래스이다. '포함'으로 설명된다. '상속'과 주로 비교되는 개념이다. (is-a vs has-a) Composition 혹은 Aggregation 이라고 불리기도 한다. 코드 재사용성을 높여주고, 상속의 단점을 해결할 수도 있다. 자바코드에서는 다중 상속의 제한이 없는 인터페이스로 구현하기 용이하다. 대상 타입의 주된 기능에 선택적 기능을 '혼합(mixed in)'한다고 해서 믹스인이라 불린다. 예제 코드 public interface Singer { AudioClip sing(Song s); } public interface Songwriter { Song compose(int chartPosition); } public int..
인스턴스 (instance) 클래스는 객체의 속성을 정의 하고, 기능을 구현하여 만들어 놓은 코드 상태 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨 가령, 학생의 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가지게 됨 new 키워드를 사용하여 인스턴스 생성 힙 메모리 생성된 인스턴스는 동적 메모리(heap memory) 에 할당됨 C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함 ( free() 난 delete 이용) 자바에서 Gabage Collector 가 주기 적으로 사용하지 않늠 메모리를 수거 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨 참조 변수, 참조 값 `St..
학생 클래스를 정의 하고 이를 사용해 보자 학생 클래스의 속성을 멤버 변수로 선언하고 메서드를 구현한다 `public class Student { public int studentID; public String studentName; public String address; public void showStudentInfo() { System.out.println(studentName + "," + address); } public String getStudentName() { return studentName; } }` 학생 클래스를 생성하여 생성된 객체(인스턴스)에 각각 다른 이름과 주소를 대입한다 `public class StudentTest { public static void main(Strin..
함수란 (function) 하나의 기능을 수행하는 일련의 코드 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음 함수 정의하기 함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성됨 `int add(int num1, int num2) { int result; result = num1 + num2; return result; }` 함수 구현하기 예제 `public class FunctionTest { public static int addNum(int num1, int num2) { int result; result = num1 + num2; return result; } pub..
객체를 찾아 봅시다 온라인 쇼핑몰에 회원 로그인을 하고 여러 판매자가 판매하고 있는 제품 중 하나를 골라 주문을 한다 아침에 회사에 가는 길에 별다방 커피숍에 들려 아이스 카페라떼를 주문했다 성적확인을 위해 학사 관리 시스템에 로그인 하여 수강 한 과목들의 성적을 확인했다 클래스는 객체의 청사진(blueprint) 입니다 객체의 속성은 클래스의 **멤버 변수(member variable)**로 선언 함 학생 클래스 `public class Student { int studentNumber; String studentName; int majorCode; String majorName; int grade; }` 주문 클래스 `public class Order { int orderId; String buyer..
java.lang.Math클래스의 sqrt() 메서드입니다double타입의 인수를 전달하면 인수에 대한 double타입의 제곱근 값을 리턴해줍니다제곱근은 음수가 나올 수 없으므로 음수를 입력하면 NaN(Not a Number)을 리턴해줍니다 Math.Sqrt() 사용방법Math.Sqrt(double d);사용하여 d의 제곱근을 출력합니다 Math.Sqrt() 사용예제import java.io.IOException; public class MathSqrt { public static void main(String[] args) throws IOException { System.out.println("9의 제곱근 : " + Math.sqrt(9)); System.out.println("20의 제곱근 : " ..
Math.pow()를 이용하여 거듭제곱을 계산할 수 있습니다. pow는 power를 의미하고, power의 뜻은 거듭제곱입니다. pow() 인자로 a와 b를 전달하며, a의 b 제곱이 리턴됩니다. 즉, a를 b번 곱한 값이 리턴됩니다. // Math.java public static double pow(double a, double b) 다음과 같이 3.2의 3제곱을 계산할 수 있습니다. double result = Math.pow(3.2, 3); System.out.println(result); 실행해보면 약 32.76이 리턴됩니다. 이 값은 3.2 * 3.2 * 3.2와 같습니다. 32.76800000000001 int로 변환하고 싶다면 다음과 같이 직접 형변환해줘야 합니다. int result = ..