'Java'에 해당되는 글 19건

  1. 2018.11.04 자바 표준 입력 클래스 Scanner 사용법 1
  2. 2018.10.17 자바 상속
  3. 2018.10.16 자바 싱글톤 클래스(Singleton class) 3
  4. 2018.10.15 자바 Wrapper Class
  5. 2018.10.04 자바 파일 입출력



안녕하세요 열코입니다.

이번 시간에는 자바의 기본 입력 클래스인 스캐너(Scanner) 클래스에 대해 알아보도록 하겠습니다.

자바의 스캐너 클래스는 java.util 패키지 내에 존재하는 클래스로,

정수(int), 실수(double)등의 기본적인 데이터 타입 입력을 받기위한 클래스입니다.

자바에서 콘솔(Console)의 표준 입력의 대표 클래스로, 가장 간단하고 쉬운 방법으로 읽어 올 수 있습니다.

그러나 많은 양과 다수의 회수의 입력을 받아야 할 때에는 추천하지 않는 클래스입니다.

이에대한 자세한 설명은 추후에 설명하도록 하겠습니다.


스캐너 클래스를 사용하기 위해서는 다음과 같은 사항에 주의해야합니다.

1. 스캐너 클래스의 객체를 만들려면 표준 입력 스트림을 나타내는 System.in이라는 이미 정의 되어있는 객체를

전달해야 합니다. (파일로부터의 입력은 File 클래스의 객체를 전달할 수도 있습니다.)

2. 특정 데이터 유형의 값을 읽기 위해 사용하는 함수는 next~() 함수입니다.

예를들어, nextInt(), nextDouble() 등과 같은 함수를 사용할 수 있습니다.

3. 문자열, 한줄(엔터키 기준으로)을 모두 읽기 위해서는 nextLine() 함수를 사용할 수 있습니다.

4. 단일 문자(char)를 읽기 위해서 next()와 charAt() 함수를 함께 사용할 수 있습니다.



다음은 여러 데이터 유형의 입력을 받는 스캐너 클래스의 예제 소스코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class myScanner
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
 
        int i = scanner.nextInt();
        char c = scanner.next().charAt(0);
        long l = scanner.nextLong();
        double d = scanner.nextDouble();
        String s = scanner.nextLine();
    
        System.out.println("int : " + i);
        System.out.println("char : " + c);
        System.out.println("long : " + l);
        System.out.println("double : " + d);
        System.out.println("string : " + s);
    }
}
cs


또한 스캐너에 대해 입력이 있는지 확인하는 hasNext~() 함수를 사용하여,

원하는 만큼 입력을 받을 수도 있습니다.

다음은 hasNextInt() 함수를 사용한 예제 소스코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class myScanner
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
 
        int i = 0;
 
        while(scanner.hasNextInt())
        {
            int num = scanner.nextInt();
            i += num;
        }
 
        System.out.println("total : " + i);
    }
}
cs



이상 '자바 Scanner 클래스'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

메인 페이지로 이동하시면 더 많은 자료를 볼 수 있습니다.


'Java' 카테고리의 다른 글

구글, 파파고 번역 API 성능 비교  (1) 2019.09.18
google translate api v3 사용법  (1) 2019.09.16
java spring pwa fcm web push 구현  (2) 2019.09.10
Object 클래스에 대해  (0) 2018.11.04
자바 상속  (0) 2018.10.17
자바 싱글톤 클래스(Singleton class)  (3) 2018.10.16
자바 Wrapper Class  (0) 2018.10.15
자바 파일 입출력  (0) 2018.10.04

자바 상속




안녕하세요 열코입니다.

상속은 객체지향 프로그래밍의 중요한 기능중 하나입니다.


주요 용어

- Super Class : 기능이 상속 된 클래스 (기본, 상위 클래스)


- Sub Class : 다른 클래스를 상속하는 클래스(파생, 하위 클래스)

서브 클래스는 수퍼 클래스 필드와 메소드 외에도 자체 필드와 메소드를 추가 할 수 있습니다.


- Reusability : 재사용성

새로운 클래스를 만들 때 상위 클래스에 이미 포함된 코드를 새 클래스에 파생시켜 재사용합니다.



상속을 사용하기 위해 extends 키워드를 사용합니다.

예)


1
2
3
class child extends parent {
    // methods and fields
}
cs


상속의 구체적인 설명을 위해 예제 코드를 통해 알아보도록 하겠습니다.


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
32
33
34
35
36
37
38
39
40
41
public class Main {
    public static void main(String[] args) 
    {
        Child c = new Child(5);
        c.up();
        c.up();
        c.print();
    }
}
class Parent {
    protected static int a;
    
    public Parent(int get) {
        a = get;
    }
    
    public void up() {
        a++;
    }
    public void down() {
        a--;
    }
    
    public void print() {
        System.out.println(a);
    }
}
 
class Child extends Parent {
    private int b;
    
    public Child(int get) {
        super(a);
        a = get;
        b = get + 5;
    }
    
    public void print() {
        System.out.println(a + ", " + b);
    }
}
cs


위 프로그램에서 상속하는 동안 수퍼클래스가 아닌 하위클래스 객체만 생성됩니다.

Child 클래스의 객체가 만들어지면 수퍼클래스의 모든 메소드와 필드의 복사본을 Child 객체의 메모리로 가져옵니다.

그래서 하위 클래스의 객체에서 수퍼클래스의 멤버에 접근할 수 있습니다.



자바에서는 여러가지 상속 유형을 지원합니다.

1. 단일 상속(Single Inheritance)

단일 상속에서 하위 클래스는 수퍼 클래스의 기능을 상속받습니다.

위 그림에서 부모클래스는 자식클래스의 기본 클래스로 사용됩니다.


2. 다중 레벨 상속(Multilevel Inheritance)

다중 레벨 상속에서 파생클래스는 기본 클래스를 상속하며 파생 클래스도 다른 클래스의 기본 클래스로 작동합니다.

자바에서 자식클래스가 조부모 클래스의 멤버에 직접 접근할 수 없습니다.(해당 참고자료)


3. 계층적 상속(Hierarchical Inhreitance)

계층적 상속은 하나의 클래스에서 둘 이상의 하위 클래스를 상속하는것을 말합니다.


4. 다중 상속(Multiple Inheritance)

하나이상의 수퍼클래스를 가지는것을 다중상속이라고합니다.

원래 자바에서는 다중상속을 지원하지는 않지만 인터페이스를 통해 구현이 가능합니다.


5. 하이브리드 상속(Hybrid Inheritance)

하이브리드 상속 역시 다중상속에 포함되기 때문에 자바에서 지원하지 않지만

인터페이스를 통해 구현 가능합니다.


자바 상속 관련

- 수퍼 클래스 : 수퍼 클래스가 없는 Object 클래스를 제외한 모든 클래스에는 하나의 수퍼클래스가 존재합니다.

다른 명시적 수퍼클래스가 없으면 암시적으로 Object 클래스의 서브 클래스입니다.

- 수퍼클래스는 하나만 존재 : 수퍼클래스는 여러개의 하위 클래스를 가질 수 있지만

하위 클래스는 하나의 수퍼클래스만 가질 수 있습니다. 이는 자바가 클래스와 함께 다중상속을 지원하지 않기 때문입니다.

위에서 설명했듯이 인터페이스를 통해 다중상속을 구현할 수 있습니다.

- 생성자 : 하위 클래스는 수퍼클래스의 모든 멤버를 상속합니다.

생성자는 멤버가 아니기 때문에 상속되지 않지만 super() 키워드를 통해 하위 클래스에서 호출 가능합니다.


하위 클래스 관련

- 상속된 필드는 다른 필드와 마찬가지로 직접 사용될 수 있습니다.

- 수퍼클래스에 없는 새 클래스를 서브클래스에 선언할 수 있습니다.

- 수퍼클래스에 없는 새 메소드를 서브클래스에 선언할 수 있습니다.

- 수퍼클래스에 있는 동일한 이름을 가진 메소드를 작성하여 오버라이드할 수 있습니다.

- 수퍼클래스에 있는 이름과 같은 새로운 static 메소드를 만들어 숨길 수 있습니다.



이상 '자바 상속'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.








안녕하세요 열코입니다.

이번시간에는 자바에서의 싱글톤 클래스에 대해 알아보도록 하겠습니다.


☞ 싱글톤 클래스란

객체지향 프로그래밍에서 싱글톤 클래스는 한번에 하나의 객체(Instance)만 가질 수 있는 클래스입니다.

싱글톤 클래스의 객체를 만들때 변수는 첫번째 객체를 가리킵니다.

따라서 어떤 객체를 통해 클래스 내부 변수를 수정하면 생성된 단일 객체의 변수에 영향을 미칩니다.



싱글톤 클래스를 만드는 방법

1. 생성자를 private으로 만듭니다.

2. 싱글톤 클래스를 반환 유형으로 한 정적 메소드를 작성합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MySingletonClass {
    private static MySingletonClass single_instance = null;
    
    private MySingletonClass() {
        
    }
    
    public static MySingletonClass getInstance() {
        if(single_instance == null) {
            single_instance = new MySingletonClass();
        }
        
        return single_instance;
    }
}
cs



일반 클래스 vs 싱글톤 클래스

일반 클래스의 경우 클래스를 정의할때 생성자를 사용하는 반면, 싱글톤 클래스의 경우 getInstance() 메소드를 사용합니다.



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
32
33
34
35
public class Main {
    public static void main(String[] args) 
    {
        MySingletonClass singleton1 = MySingletonClass.getInstance();
        MySingletonClass singleton2 = MySingletonClass.getInstance();
        MySingletonClass singleton3 = MySingletonClass.getInstance();
        
        System.out.println(singleton1.s);
        System.out.println(singleton2.s);
        System.out.println(singleton3.s);
        
        singleton1.s = "Change String";
        
        System.out.println(singleton1.s);
        System.out.println(singleton2.s);
        System.out.println(singleton3.s);
    }
}
class MySingletonClass {
    private static MySingletonClass single_instance = null;
    
    public String s;
    
    private MySingletonClass() {
        s = "MySingletonClass";
    }
    
    public static MySingletonClass getInstance() {
        if(single_instance == null) {
            single_instance = new MySingletonClass();
        }
        
        return single_instance;
    }
}
cs


4번째 줄에 MySingletonClass라는 제가 정의한 싱글톤 클래스의 객체(인스턴스)를 3개 만드는 것을 볼 수 있습니다.

일반 클래스의 경우 class a = new class(); 이런식으로 객체를 생성하는것과 달리

싱글톤 클래스의 경우 getInstance() 메소드를 호출하여 객체를 생성하는 모습입니다.


8,9,10번 줄의 결과는 어떻게될까요?

아시다시피 s는 "MySingletonClass"라는 문자열입니다. 이 문자열이 3번 출력됩니다.


12번째 줄에서 첫번째 싱글톤 객체의 s를 "Change String"으로 변경했습니다.


그 다음에 출력을 해보면 어떤 결과가 나올까요?

첫번째 싱글톤 객체의 s만 바꿨기 때문에

ChangeString

MySingletonClass
MySingletonClass

가 나올것 같지만 아닙니다!!


싱글톤 클래스는 위에서 말씀드렸다시피 여러 객체를 생성해도 하나의 객체만 가리키고 있기 때문에

MySingletonClass

MySingletonClass
MySingletonClass

의 출력 결과를 가집니다.


singleton1, singleton2, singleton3 모두 하나의 클래스 객체를 가리키고 있는것이죠.



질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



자바 Wrapper Class




안녕하세요 열코입니다.

이번 시간에는 자바의 래퍼(Wrapper) 클래스에 대해 알아보도록 하겠습니다.


☞ 래퍼 클래스란


래퍼(Wrapper) 클래스는 기본 자료형(Data Type)을 래핑하거나 포함하는 클래스입니다.

여기서 기본 자료형은 int, char, long, float, double..등을 말합니다.

래퍼 클래스에 객체를 만들면 필드가 포함되며 이 필드에는 기본 자료형을 저장할 수 있습니다.



래퍼 클래스 사용


1. 기본 자료형을 객체로 변환합니다. 메소드에 전달된 인수를 수정하려면 객체가 필요합니다.

- 기본 자료형의 전달은 값의 전달이기 때문

2. java.util 패키지 클래스는 객체만 처리하기 때문에 래퍼 클래스가 필요합니다.

3. 어레이리스트또는 벡터와 같은 Collection 프레임워크의 데이터 구조에는 기본 유형이 아닌 객체 유형만 저장됩니다.

4. 멀티 쓰레딩에서 동기화를 지원하려면 객체가 필요합니다.



기본 데이터 타입 및 해당 래퍼 클래스


기본 데이터 타입 

래퍼 클래스

char

Character

byte

Byte

short

Short

int(long)

Integer

 float

Float

double

Double

boolean

Boolean



오토 박싱 / 언박싱


기본 자료형을 해당 래퍼 클래스의 객체로 자동 변환하는것을 오토 박싱(AutoBoxing)이라고 합니다.



1
2
3
4
5
6
7
8
9
10
11
12
import java.util.ArrayList; 
class Autoboxing 
    public static void main(String[] args) 
    { 
        char ch = 'c'
        Character a = ch; // 오토박싱
  
        ArrayList<Integer> arrayList = new ArrayList<Integer>(); 
        arrayList.add(5); // 오토박싱
    } 
cs


언박싱은 오토박싱의 역과정입니다. 래퍼 클래스의 객체를 해당 기본 자료형으로 변환하는것을 언박싱(Unboxing)이라고 합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.ArrayList; 
class Unboxing 
    public static void main(String[] args) 
    { 
        Character ch = 'c'
        char a = ch; // 언박싱
  
        ArrayList<Integer> arrayList = new ArrayList<Integer>(); 
        arrayList.add(5); 
        int num = arrayList.get(0);  // 언박싱
    } 
cs



예제코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class WrappingUnwrapping 
    public static void main(String args[]) 
    { 
        byte a = 1
        Byte byteobj = new Byte(a); // byte -> Byte 객체 래핑
        int b = 10
        Integer intobj = new Integer(b); // int -> Integer 객체 래핑
        float c = 18.6f; 
        Float floatobj = new Float(c); // float -> Float 객체 래핑
        double d = 250.5
        Double doubleobj = new Double(d); // double-> Double 객체 래핑
        char e='a'
        Character charobj=e; // char -> Character 객체 래핑
 
  
        byte bv = byteobj; // Byte 객체 -> byte 언래핑
        int iv = intobj; // Integer 객체 -> int 언래핑
        float fv = floatobj; // Float 객체 -> float 언래핑
        double dv = doubleobj; // Double 객체 -> double 언래핑 
        char cv = charobj; // Character 객체 -> char 언래핑
    } 
cs



이상 'Java Wrapper Class'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.




자바 파일 입출력



안녕하세요 열코입니다.

이번 시간에는 자바에서 파일 처리하는 방법에 대해 알아보겠습니다.

자바에서 파일 입출력을 하기 위해서 사용되는 클래스는 여러가지가 있는데요

그 종류에는 입력에 대한 클래스가 다음과 같이 존재하며,


[Writer 클래스]

Writer ┬ BufferedWriter

           └ OutputStreamWriter ─ FileWriter


출력에 대한 클래스는 다음과 같이 존재합니다.


[Reader 클래스]

Reader ┬ BufferedReader

            └ InputStreamReader ─ FileReader


입력과 출력 클래스들은 각각 Writer, Reader 클래스에서 파생됐습니다.

이중 BufferedReaderBufferedWriter는 이름에서처럼 버퍼를 사용하여 파일 입,출력을 수행하며

속도적인면에서 향상된 모습을 보입니다.

오늘은 파일 입,출력으로 BufferedReader와 BufferedWriter의 사용법에 대해 알아보도록 하겠습니다.


1. 파일 입력(BufferedWriter)

텍스트파일에 텍스트를 입력하기 위해서 먼저 BufferedWriter 객체를 다음과 같이 선언해 줍니다.


BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));


BufferedWriter와 FileWriter 클래스를 사용하기 위해서 java.io.BufferedWriter와 java.io.FileWriter를 import 해줍니다.

그리고 BufferedWriter 객체를 선언해 주면 try, catch문을 사용하거나 throws를 선언하여 예외처리를 해 주어야 합니다.

저는 다음과 같이 IOException을 main함수에서 throws 해 주었습니다.



public static void main(String[] arg) throws IOException {

BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));


이대로 실행을 해 보면 해당 프로젝트 폴더에 test라는 텍스트 파일이 하나 생성되는것을 확인 할 수 있습니다.



보시면 아시겠지만 크기가 0KB입니다.

왜냐구요? 

아무것도 쓰지 않았으니까요 ㅎㅎ 아직은 객체를 생성하여 텍스트 파일을 만들어 주었을 뿐입니다.

자 그럼 텍스트파일에 텍스트를 한번 작성 해 보겠습니다.


public static void main(String[] arg) throws IOException {

BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\users\\simt\\desktop\\test.txt"));

bw.write("열코의 프로그래밍 일기");

bw.newLine();

bw.write("자바 파일 입출력");

bw.write("\r\n");

bw.write("다같이 열코합시다! ^-^");

bw.close();


파일에 데이터를 쓸 때에는 write() 함수를 사용합니다.

개행(줄바꿈)을 할 때에는 "\r\n"을 write하거나 newLine() 함수를 사용합니다.

그리고 항상 강조해왔던 객체를 모두 사용하고 난 후 close()로 닫아주기! 

그럼 파일에 잘 쓰여졌는지 확인 해 볼까요?


☞ 출력 결과


보시는 것처럼 아주 잘 작성되었습니다.


*flush()에 대해

BufferedWriter는 데이터 스트림을 버퍼에 저장 해 두었다가 가득 차면 디스크에 쓰는 방식입니다.

flush()함수는 버퍼가 가득 차지 않아도 명시적으로 디스크에 내용을 쓰라는 함수인데,

자주 사용하면 메모리와 속도적인 측면에서 많이 비 효율적입니다.

또한 위와 같은 간단한 코드에서는 close()함수를 호출하여 객체를 닫아주면 자동으로 객체를 닫기 전

flush()함수를 호출하게 됩니다. 무분별한 flush()함수 호출을 지양하고, 꼭 필요한 시점에 사용하도록 합시다.



2. 파일 출력(BufferedReader)

파일을 쓰는것도 중요하지만 읽어오는것도 그만큼 중요하겠죠? ㅎㅎㅎ

파일 읽기(출력)에 대해 알아봅시다.

파일 읽기를 위해 BufferedReader 객체를 다음과 같이 선언해 줍니다.


BufferedReader br = new BufferedReader(new FileReader("test.txt"));


BufferedReader 와 FileReader 클래스를 사용하기 위해 java.io.BufferedReader와 java.io.FileReader를 import 해줍니다.

또한 FileReader 객체를 만들어 줌으로써 FileNotFoundException에 대해 예외처리를 해 주어야하는데

이번에는 try, catch문을 사용해서 예외처리를 해 보겠습니다.


public static void main(String[] arg)  {

try {

BufferedReader br = new BufferedReader(new FileReader("test.txt"));

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


이와 같이 BufferedReader 객체를 선언하고 FileReader를 통해 파일을 열면 파일 출력을 위한 준비가 모두 끝났습니다.

한번 텍스트 파일을 열어 콘솔창에 표준 출력으로 출력해 보겠습니다.


public static void main(String[] arg)  {

try {

BufferedReader br = new BufferedReader(new FileReader("test.txt"));

String line = null;

while((line = br.readLine()) != null) {

System.out.println(line);

}

br.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}


텍스트 파일을 열어 문자열 변수에 한줄씩 읽어 파일의 끝까지 반복문을 통해 읽어옵니다.

읽어 온 데이터를 콘솔 화면에 출력하고 사용이 다 끝난 후 close()함수로 객체를 닫아주었습니다.

또한 BufferedReader의 readLine()함수를 사용하기 위해 IOException을 처리해주어야 하는데,

try-catch문에서 IOException에 대해 catch문을 추가하여 처리했습니다.


☞ 출력 결과

열코의 프로그래밍 일기

자바 파일 입출력

다같이 열코합시다! ^-^





이상 '자바 파일 입출력'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.




to Top