Development Project

Chapter06 모듈과 패키지 개념, 자바 기본 패키지 본문

Language/Java

Chapter06 모듈과 패키지 개념, 자바 기본 패키지

나를 위한 시간 2021. 12. 28. 12:46
  1. 패키지(Package)
    • 패키지의 필요성
      - 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이
      - 다른 사람이 작성한 자바 클래스나 라이브러리를 사용해야 할 때 클래스명이 동일한 경우도 발생할 수 있음
      - 하지만 패키지명이 다르면 클래스명이 동일해도 충돌없이 사용 가능 ( 경로명이 달라지기 때문 )

    • 패키지의 개념
      - 서로 관련된 클래스와 인터페이스의 컴파일 된 클래스 파일들을 하나의 디렉토리에 묶은 것
  2. import와 클래스 경로
    • 패키지에 작성된 클래스를 사용하는 방법
      1. import를 이용할 때
        public class ImportExample {
            public static void main(String[] args) {
                java.util.Scanner scanner = new java.util.Scanner(System.in);
                System.out.println(scanner.next());
            }
        }
        - 소스 내에서 패키지 이름과 클래스 이름의 전체 경로명을 써주어야 함
      2. import를 이용하지 않을 때
        import java.util.Scanner; 
        // 또는 import java.util.*;	// * : 현재 패키지 내의 클래스만을 의미 (하위패키지의 클래스는 X)
        
        public class ImportExample {
            public static void main(String[] args) {
                Scanner scanner = new Scanner(System.in);
            }
        }​
        - 소스의 시작 부분에 사용하려는 패키지 명시
  3. 패키지 만들기
    • 패키지 선언 [ package 패키지명 ] : 컴파일한 클래스 파일을 패키지명의 디렉터리에 저장하라는 명령줄
      package Graphic;    // Line 클래스를 Graphic 패키지에 저장
      
      import UI.Tools;    // Tools 클래스의 경로명 알림
      
      public class Line{
          public void draw() {
              Tools t = new Tools();
          }
      }​
    • 패키지의 특징
      - 관련된 클래스 파일을 하나의 패키지로 계층화하여 관리가 용이함
      - 패키지별로 접근을 제한할 수 있음
      - 서로 다른 패키지에 이름이 같은 클래스와 인터페이스가 존재 가능 == 동일한 이름이라도 사용 가능
      - 높은 소프트웨어 재사용성
      • 디폴트 패키지
        - package 선언문 없이 만들어진 클래스의 패키지
        - 디폴트 패키지는 현재 디렉터리 
  4. 모듈 개념
    • 모듈
      - 패키지의 상위 개념
      - 자바 컴포넌트들을 필요에 따라 조립하여 사용하기 위함
      - 컴퓨터 시스템의 불필요한 부담 감소
  5. 자바 JDK에서 제공하는 패키지
    • java.lang
      - String, 수학 함수, 입출력 등 자바 프로그래밍에 필요한 기본적인 클래스와 인터페이스
      - 자동으로 import됨
    • java.util
      - 자바 유틸리티 패키지
      - 날짜, 시간, 벡터, 해시맵 등과 같은 다양한 유틸리티 클래스와 인터페이스를 제공
    • java.io
      - 키보드, 모니터, 프린터, 디스크 등에 입출력 가능한 클래스와 인터페이스 제공
    • java.awt
      - 자바 GUI 프로그래밍을 위한 클래스와 인터페이스 제공
    • javax.swing
      - 자바 GUI 프로그래밍을 위한 스윙 패키지
  6. Object 클래스
    • 특징
      - java.lang 패키지에 포함
      - 모든 클래스의 슈퍼클래스(부모클래스)
    • 주요 메소드
      => toString을 오버라이딩 하여 사용하면, 원하는 출력형식 또는 처리형식으로 결과를 얻을 수 있음
  7. Wrapper 클래스
    • 개념
      - 자바의 기본 타입을 클래스화한 8개 클래스 ( 기본타입의 값을 객체로 다룰 수 있게 함)
    • Wrapper 활용 방법
      1. 기본 타입의 값을 Wrapper 객체로 변환 : 박싱(boxing) 
        1. 기본 타입의 값으로
          Integer i = Integer.valueOf(10);
          Character c = Character.valueOf("c");
          Double d = Double.valueOf(3.14);
          Boolean b = Boolean.valueOf(true);
          
          // 자동 박싱
          Integer ten = 10;
        2. 문자열로
          Integer I = Integer.valueOf("10");
          Double d = Double.valueOf("3.14");
          Boolean b = Boolean.valueof("false");
        3. Float를 만들 때
          Float f = Float.valueOf((double) 3.14);
      2. 객체로부터 기본 값 알아내기 : 언박싱(unboxing)
        int ii = i.intValue(); // ii = 10
        char cc = c.charValue(); // cc = ’c
        double dd = d.doubleValue(); // dd = 3.14
        boolean bb = b.booleanValue(); // bb = true
        
        // 자동 언박싱
        int n = i;
      3. 문자열을 기본 데이터 타입으로 변환
        int i = Integer.parseInt("123");
        boolean b = Boolean.parseBoolean("true");
        double f = Double.parseDouble("3.14");
      4. 기본 타입을 문자열로 변환
        String s1 = Integer.toString(123); 
        String s2 = Integer.toHexString(123); 
        String s3 = Double.toString(3.14);
        String s4 = Charater.toString('a'); 
        String s5 = Boolean.toString(true);​
  8. String 클래스 ( java.lang.String)
    • String 생성
      1. 리터럴로 : JVM이 리터럴 관리, 응용프로그램 내에서 공유됨 
        String str1 = "abcd";​



      2. String 클래스의 생성자로 : Heap 메모리에 String 객체가 생성
        char data[] = {'a', 'b', 'c', 'd'};
        String str2 = new String(data);
        String str3 = new String("abcd");​

        • String의 생성자
    • 문자열 연산
      • 문자열 비교 [ compareTo( String anotherString ) ]
        - anotherString보다 먼저나오면 음수, 나중에 나오면 양수, 같으면 0을 리턴함
        String java= "Java";
        String cpp = "C++";
        
        int res = java.compareTo(cpp);
        if(res == 0)	
        	System.out.println("the same");
        else if(res < 0)	
        	System.out.println( java + " < " + cpp);
        else
        	System.out.println( java + " > " + cpp);​
        - 무조건 문자열 비교는 ==이 아닌 equals임
        bc) equals는 내용을 비교하기 때문

      • 문자열 연결
        1. +연산자
          - 객체는 객체.toString() 호출
          - 기본 타입 값은 문자열로 변환하여 연결
          System.out.println("abcd" + 1 + true + 3.13e-2 + 'E' +" fgh");
        2. String객체.concat(String str) 이용
          - 기존 String 객체에 연결되지 않고, 새로운 String 객체를 리턴함
          String s = new String("Hello");
          String t = s.concat("Java");
      • 문자열 내 공백제거 [ String객체.trim(); ]
        - 문자열 앞 뒤 공백문자(tab, enter, space)를 제거한 문자열을 리턴함
        String a = "      abcd efg  ";
        String b = "   xyz\t  ";
        String c = a.trim();	// c = "abcd efg"
        String d = b.trim();	// d = "xyz"​
      • 문자열에서 문자 추출 [ String객체.charAt(int index); ]
        String a = "class";
        char c = a.charAt(2);	// c = 'a'​
      • 문자열 변경 [ String객체.replace("변경 전 문자열", "변경 후 문자열"); ]
        a = new String("C#");
        a = a.replace("C#", "Java");	// a = "Java"​
      • 문자열 분리 [ String객체.split("구분자"); ]
        String a = "Java,C++"
        String s[] = a.split(",");	// s[0] = "Java", s[1] = "C++"
      • 서브스트링 추출 ( 문자열 일부 추출 ) [ String객체.substring(인덱스); ]
        a = "Java,C++";
        a = a.substring(5);	// a = "C++"​
  9. StringBuffer 클래스
    • StringBuffer 클래스
      - 가변 크기의 문자열 저장 클래스
      - StringBuffer 객체의 크기는 스트링 길이에 따라 가변적

    • StringBuffer 클래스 생성
      StringBuffer sb = new StringBuffer("java");​
      => 생성자를 이용해 생성 가능
      • 생성자
    • 문자열 연산
      • 문자열 추가 
        1. append사용 [ StringBuffer객체.append( "추가할 문자열" ) ]
          StringBuffer sb = new StringBuffer("a");
          sb.append(" pencil"); 	// sb = "a pencil"​
        2. insert 사용 [ StringBuffer객체.insert( 인덱스, "추가할 문자열" ) ]
          StringBuffer sb = new StringBuffer("a pencil");
          sb.insert(2, "nice "); 	// sb = "a nice pencil"​​


      • 문자열 대체 [ StringBuffer객체.replace( 첫 인덱스, 마지막 인덱스, "바꿀 문자열" ); ] 
        StringBuffer sb = new StringBuffer("a nice pencil");
        sb.replace(2, 6, "bad"); 	// sb = "a bad pencil"​
      • 문자열 삭제 [StringBuffer객체.delete( 첫 인덱스, 마지막 인덱스 ); ]
        StringBuffer sb = new StringBuffer("a bad pencil");
        sb.delete(0, 2); 	// sb = "bad pencil"​​
      • 문자열 뒤집기 [ StringBuffer객체.reverse(); ]
        StringBuffer sb = new StringBuffer("bad pencil");
        sb.reverse(); 	// sb = "licnep dab"​​
      • 문자열 길이 [ StringBuffer객체.length(); ]
        StringBuffer sb = new StringBuffer("licnep dab");
        sb.length; 	// 10​
      • 문자열에서 특정 인덱스 추출 [ StringBuffer객체.charAt(인덱스); ]
        StringBuffer sb = new StringBuffer("licnep dab");
        sb.charAt(3) 	// 'n'​
      • 문자열 길이 설정 [ StringBuffer객체.setLength(길이); ]
        StringBuffer sb = new StringBuffer("licnep dab");
        sb.setLength(3) 	// "lic"​
  10. StringTokenizer 클래스
    • StringTokenizer 클래스 ( java.util.StringTokenizer )
      - 하나의 문자열을 여러 문자열로 분리
      - String클래스의 split() 메소드로 동일하게 구현 가능

    • StringTokenizer 클래스 생성
      import java.util.StringTokenizer;
      
      public class StringTokenizerEx {
          public static void main(String[] args){
             StringTokenizer st = new StringTokenizer("홍길동/장화/홍련", "/");
             while(st.hasMoreTokens()){
                System.out.println(st.nextToken());
             }
          }
      }
      /*
      *홍길동
      *장화
      *홍련
      */
  11. Math 클래스
    • Math 클래스 ( java.lang.Math )
      - 산술 연산 메소드 제공
      - 모든 메소드는 static 타입이므로, 클래스 이름으로 호출해야함
    • Math 클래스를 이용한 난수 발생
      Math.random()*100;	// 0.0 ~ 99.99.. 사이의 실수 리턴
      Math.random()*100+1;	// 1.0 ~ 100.99.. 사이의 실수 리턴
      (int)(Math.random()*100+1)	// 1 ~ 100 사이의 정수 리턴​
      => Random 클래스를 이용해 난수를 발생시킬 수 있음
      • Random 클래스 ( java.util.Random )
        - int, long, float, double 등의 다양한 형의 난수를 만들어 제공함
        Random rd1 = new Random();​
  12. Calendar 클래스
    • Calendar 클래스 ( java.util.Calendar )
      - 시간과 날짜 정보를 관리
      - Calendar 클래스의 각 시간 요소를 설정하거나 알아내기 위한 필드

    • Calendar 객체 생성
      Calendar now = Calendar.getInstance();​
      - now 객체는 현재 날짜와 시간 정보를 가지고 생성됨
      - Calendar는 추상 클래스이므로 new Calendar() 하지 않음

    • 날짜, 시간 정보 추출하기
      int s = now.get(Calendar.필드이름);​


    • 날짜, 시간 정보 설정
      Calendar firstDate = Calendar.getInstance();
      
      firstDate.clear();
      firstDate.set(2016, 11, 25);	// 2016년 12월 25일. 12월은 11로 설정
      firstDate.set(Calendar.HOUR_OF_DAY, 20);	// 저녁 8시로 설정
      firstDate.set(Calendar.MINUTE, 30);	// 30분으로 설정​

'Language > Java' 카테고리의 다른 글

Chapter05 상속  (0) 2021.12.27
Chapter04 클래스와 객체  (0) 2021.12.22
Chapter03 반복문과 배열 그리고 예외 처리  (0) 2021.12.20
Chapter02 자바 기본 프로그래밍  (0) 2021.12.20
Chapter01 자바시작  (0) 2021.12.19
Comments