전체 글
-
[JAVA] Generic TypeLanguage/Java 2020. 2. 1. 13:08
오늘은 제네릭 타입에 대해 알아보겠습니다. Generic Type? 제네릭 타입은 클래스나 메소드를 작성할 때, 사용할 객체 타입을 지정할 수 있도록 하는 기능입니다. 지정할 타입을 꺾쇠()로 감싸 표현해, 해당 데이터 타입만을 사용하도록 타입을 제한할 수 있습니다. 이러한 제네릭 타입을 사용하는 이유는 무엇일까요? - 컴파일 시 에러 체크 가능 타입이 일치하지 않는 에러가 컴파일 단계에서 검출되지 않는 경우가 종종 발생합니다. 제네릭 타입을 사용하면 타입이 일치하지 않는 경우 실행 단계 이전인 컴파일 단계에서 타입 에러를 감지할 수 있습니다. - 불필요한 타입 변환 생략 가능 구체적인 타입을 지정해, 불필요하게 타입을 변환하는 과정을 생략할 수 있습니다. List list = new ArrayList(..
-
[JAVA] Reader/WriterLanguage/Java 2019. 12. 7. 21:38
지난 포스팅에서 바이트 단위로 입출력이 이루어지는 InputStream/OutputStream에 대해 정리했습니다. 오늘은 문자 단위로 입출력이 이루어지는 Reader/Writer에 대해 정리해보겠습니다. Reader와 Writer는 문자(Character) 단위 입출력의 최상의 클래스입니다. 추상 클래스인 이 Reader와 Writer클래스를 상속받은 후손들을 이용해 사용할 수 있습니다. 문자를 단위로 즉, 2byte 문자나 문자열을 읽고 쓰기 위해 입출력이 이루어진다는 사실을 제외하고는 앞선 포스팅의 InputStream/OutputStream과 크게 다른 것이 없습니다. InputStreamReader/OutputStreamWriter 앞서 InputStream/OutputStream은 byte단위..
-
[JAVA] InputStream/OutputStreamLanguage/Java 2019. 12. 7. 15:31
오늘은 자바의 입출력에 관한 내용을 정리해 보려고 합니다. 입출력 즉, I/O란 프로그램이 프로그램 외부와 데이터를 주고받는 것을 의미합니다. 자바에서는 이러한 입출력 동작을 위해 java.io 패키지를 통해 다양한 클래스를 제공합니다. 이번 포스팅에서는 InputStream/OutputStream과 그 하위 클래스들에 대해 정리해보겠습니다. Stream 우선 Stream이라는 용어에 대해 알아보겠습니다. 입출력을 위해 어느 한쪽과 다른 한쪽이 데이터를 주고받기 위해서는 데이터를 전송할 수 있는 통로가 필요합니다. 이 통로 역할을 하는 것을 Stream이라고 하는데요. Stream은 하나의 방향으로, 순차적으로 전송이 이루어집니다. InputStream/OutputStream InputStream과 Ou..
-
[JAVA] Thread와 Multi ThreadLanguage/Java 2019. 11. 12. 20:50
Thread란? 우리가 프로그램을 작성하고 이 프로그램을 실행하면 그 '실행된 프로그램'을 프로세스라고 합니다. 그리고 프로세스 내부에 실제로 작업을 수행하고 처리하는 더 작은 단위를 스레드(Thread)라고 하는데요. 하나의 프로세스에는 하나 이상의 스레드가 존재합니다. 스레드가 하나인 경우에는 프로그램 내의 모든 작업을 순차적으로 수행하지만, 스레드가 여러 개인 경우 각각의 스레드는 서로 다른 일을 동시에 수행할 수 있습니다. 이는 멀티프로그래밍과는 다른 개념으로 멀티 프로그램은 여러 개의 프로세스가 동시에 돌아가는 것이지만, 멀티 스레드는 하나의 프로세스 내에서 이루어지는 작업입니다. 멀티프로그래밍의경우 각각의 프로세스 간의 동기화가 어렵다는 문제가 있습니다. 하지만 스레드는 서로 간에 생성한 인스..
-
[JAVA] 다형성(Polymorphism)Language/Java 2019. 11. 9. 21:18
자바에서 다형성이란 같은 이름을 가졌지만 상황에 따라 다른 형태로 해석될 수 있다는 의미입니다. 예를 들어 A 씨는 회사에서는 개발자이고, 집에서는 딸이고, 학원에서는 수강생입니다. 모두 같은 A 씨이지만 각각의 상황에 따라 맡고 있는 역할과 하는 일들이 다릅니다. 이처럼 하나의 객체가 여러 타입을 가질 때, 이를 다형성이라고 합니다. 이러한 다형성은 반드시 상속 관계에서만 성립하는데, 예를 들어 People이라는 클래스를 상속받는 Employee클래스와 Customer클래스가 있습니다. class People{ public void eat(){ // 먹기 } public void breath(){ // 숨쉬기 } ... } class Employee extends People{ public void w..
-
[JAVA] 추상클래스와 인터페이스Language/Java 2019. 11. 9. 16:05
오늘은 그동안 저를 참 헷갈리게 해왔던, 추상 클래스(abstract class)와 인터페이스에 대해 정리해보겠습니다. 추상 클래스란? 추상 클래스는 말 그대로 추상적인 클래스를 의미합니다. 잘 와 닿지 않죠? 변수나 메소드를 가지고 있는 일반적인 형태의 클래스가 바로 실체 클래스입니다. 그리고 추상 클래스는 변수나 메소드가 구체적이지 않은 클래스이고, 그래서 추상 클래스는 어떤 실체 클래스의 공통된 변수나 메소드를 포함하고 있다고 생각할 수 있습니다. 예를 들어 강아지 클래스, 고양이 클래스, 돼지 클래스가 있다고 가정해봅시다. 이 세 클래스가 공통으로 가지고 있는 변수나 메소드에는 어떤 것들이 있을까요? 소리를 낸다는 액션을 공통의 메소드로 표현할 수 있겠죠. 물론 멍멍, 냥냥, 꿀꿀 각 동물들이 내..
-
[JAVA] String 생성 방법(new / literal)Language/Java 2019. 10. 20. 17:39
String 타입의 변수를 생성할 때는 두 가지 방법이 있습니다. 바로 new 키워드를 사용하는 방법과 리터럴을 이용하는 방법입니다. 비슷해 보이지만 두 방법에는 큰 차이가 있습니다. 바로 저장되는 공간이 다르다는 건데요. 우선, new 키워드를 사용하는 경우는 이전 포스팅에서도 자주 언급했습니다. heap메모리 영역에 실제 데이터가 저장되고 그 메모리를 참조하는 주소 값을 String 변수에 저장하는 것입니다. 따라서 new 키워드를 이용해 String객체를 생성하면 아무리 같은 문자열 데이터를 가지고있다 하더라도 서로 다른 주소 값을 갖게 됩니다. public class TestString { public static void main(String[] args) { String str1 = new S..
-
[JAVA] String/String Builder/String Buffer 비교Language/Java 2019. 10. 20. 16:34
자바에서 문자열을 이용할 때 주로 사용하는 대표적인 클래스가 바로 String클래스입니다. 하지만 String 클래스는 immutable속성이 있어서 문자열을 빈번하게 수정하는 경우 성능 저하가 일어날 수 있습니다. 따라서, 문자열을 사용하는 경우 String클래스 대신 String Builder, String Buffer를 사용하라는 이야기를 들어보셨을 텐데요. 그렇다면 왜 String을 사용하는 것이 좋지 않은지, String Builder와 String Buffer와는 어떻게 다른지 알아보겠습니다. String 클래스 우선 String 클래스의 내부 구조를 보겠습니다. String 클래스 내에 문자열을 저장하는 변수를 보면 final char 타입의 배열로 선언되어있음을 알 수 있습니다. final..