Skip to content

Latest commit

 

History

History
473 lines (375 loc) · 15.3 KB

자바1.md

File metadata and controls

473 lines (375 loc) · 15.3 KB

1 자바 프로그램 개요 및 실습환경 구축

1. 자바 언어 개요

1) 자바 언어의 탄생 배경

  • Green Project 가정용 전자기기 컴퓨터 언어 디자인

    • 작고 견고해야 하며, 신뢰 가능해야함
    • CPU 같은 디바이스에 종속 X
  • Virtual Machine에서 동작하는 중간코드 생성 => 이식성 High

  • C++ 기반 생성(절차지향, 객체지향) => Oak(완벽한 객체지향 언어) => Java 네이밍

  • WWW 발전과 Mosaic 사용에 주목

    • 자바 기반 웹 브라우저 제작 => HotJava 브라우저로 발전
      • Applet이라 불리는 자바의 기능을 보여주기 위해 브라우저가 중간코드(Bytecode)를 해석하도록 만듬
  • Netscape 2.0 자바 지원

2) 자바 언어의 특징

  • 단순
    • C, C++의 복잡한 기능 제외
      • 전위처리, 포인터, 다중 상속, 구조체, goto문, 연산자 중복...
    • Garbage Collector 자동 메모리 관리
  • 객체지향
    • 재사용성 높음
    • 코드 & 객체
    • 클래스 라이브러리 API 제공
  • 분산처리
    • 분산 환경에서 TCP/IP 프로토콜을 통해 효율적으로 실행되도록 설계됨
      • TCP/IP 네트워크 기능 내장
      • HTTP, FTP 라이브러리 제공
    • 원격 메서드 호출 관련 RMI(Remote Method Invocation) 기능 라이브러리 제공
  • 인터프리터
    • .java (소스코드) => javac(컴파일) => .class(중간코드, 바이트 코드, 클래스 코드) => java(인터프리팅, 기계어로 해석) => 실행
    • java는 컴파일 언어임과 동시에 인터프리터 언어
  • 견고
    • 포인터 사용 X
    • Garbage collector
    • 엄격한 데이터 타입 검사
    • 실행 시간에 발생하는 에러 처리
  • 안전
    • 엄격한 데이터 타입 검사
    • .java => .class => 클래스 로더(코드 분리), 바이트 코드 검증기(코드 검증) => 실행
  • 플랫폼 독립
    • 자바 가상 머신에서 구동
  • 높은 성능
    • Garbage Collector
      • 메모리 할당 객체 상태 추적
      • 더 이상 참조되지 않으면 자동으로 할당된 메모리 해제
  • 멀티 스레드
    • 스레드 : 독자적으로 수행하는 하나의 작은 프로그램
    • 하나의 CPU가 여러 개의 프로그램 동시에 수행하도록 함
  • 동적
    • 기존 프로그램 변화없이, 라이브러리에 새로운 메서드나 속성들을 추가 가능
    • 프로그램과 라이브러리 연결을 실행히간에 수행 => 라이브러리 변화를 곧바로 적용 가능

3) 자바 플랫폼

  • 플랫폼 : 프로그램이 실행될 수 있는 HW & SW 환경을 의미
  • 일반적인 플랫폼 : 컴퓨터 + 운영체제
  • 자바 플랫폼 : SW만으로 구성, JDK로 설치 (JAVA SE, EE, ME)
  • JAVA SE : 자바 언어 대부분의 패키지가 포함
  • JAVA EE : 현업에서 사용되는 API가 집약된 에디션
    • 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet, DB 연동하는 JDBC, 기타 JNDI, JTA, EJB 포함
  • JAVA ME : 모바일 기기 사용되는 API => 스마트폰이 자체 OS => 거의 사장되었음
  • 자바 가상 머신
    • 자바 APP 실행
    • APP이 운영체제에 영향 X
    • JVM은 운영체제와 직접 통신해야하므로 운영체제에 맞는 JVM 설치 필요
  • 자바 API
    • 프로그래머가 필요로하는 기본적인 Class 제공
    • 표준 클래스라고 함
    • 자바 Package
      • java.applet : 애플릿 작성
      • java.awt : GUI 패키지, javax 및 swing 패키지와 함꼐 자바 GUI APP 작성시 필수 사용, 버튼, 텍스트필드, 메뉴 등 관련 컴포넌트 및 이벤트 기능 제공
      • xjava.io : 자바 입출력 기능, 파일이나 버퍼 등의 입출력 기능 제공
      • java.lang : 자바 언어의 기초적인 사항 정의한 클래스, Object 클래스, 문자열, 시스템, 멀티스테드 기능 포함
      • java.net : 네트워크 패키지, 소켓 기능 제공
      • java.swing : GUI 패키지
      • java.util : 날짜, 여러 자료형을 하나로 취급하는 컬렉션 기능 제공

2. 실습 환경 구축

1) JDK 설치

  • JDk : Java Development Kit
  • JRE : Java Runtime Environment, 실행만을 위한 도구 구성 => SDK(Software Development Kit)까지 설치
  • 오라클 홈페이지에서 설치
  • 폴더 구조
    • bin : jdk와 관련 명령들을 포함, 자바 컴파일러와 인터프리터 명령도 포함
      • Javac : 자바 컴파일러
        • javac [options] 소스파일명.java
        • 자바 소스를 자바 바이트 코드로 번역
      • java : 자바 App 인터프리터
        • java [options] 클래스파일명 [매개변수 리스트]
        • .class 해석하여 실행 결과를 보여줌
      • appletviewer : 자바 애플릿 뷰어
        • appletviewer [options] url포함하는 html 파일명.html
        • 자바 애플릿을 실행하는 작은 웹 브라우저
      • jdb : 자바 디버거
        • jdb 클래스파일명
        • 프로그램 버그 해결위한 디버거
      • javadoc : 자바 문서 생성기
        • javadoc [options] 소스파일명.java
        • 자바 소스 파일에 대한 html 파일 생성, 소스 프로그램의 클래스나 인터페이스, 생성자, 메서드, 클래스 계층 구조에 대한 html 파일 생성
      • javap : 자바 역컴파일러
        • javap [options] 클래스파일명
        • 컴파일 후 생성된 자바 클래스 파일을 역컴파일하여 클래스 내의 정보를 추적
      • jar : 자바 파일 압축기
        • jar [options] jar 파일명 리스트
        • 다수의 자바 클래스 파일들을 하나의 .jar 파일로 압축하여 네트워크를 통한 프로그램 정손 시간 단축
    • include : 플랫폼 별 필요한 JDK 각종 헤더파일 포함
    • jre : 자바 실행 환경 관련 명령어 라이브러리 포함
    • lib : jdk에서 사용될 라이브러리 포함

2 자바 프로그램 구조 및 데이터 타입

1. 자바 프로그램 기초

1) 자바 프로그램 구조

public class 클래스명 {
    //변수 정의
    // 메서드 정의 
}
  • 자바 프로그램은 하나의 .java 파일에 하나의 클래스 정의
  • 클래스 : 자바 프로그램의 최소 구성 단위, 클래스 블록 { }안에 실행에 필요한 변수와 메서드 정의
  • public : 자바 예약어, 해당 .java 파일의 클래스를 외부에 공개
  • 주석
    • .class 파일의 크기에 영향 X
    • 단일행 : //
    • 다중행 : /* */
    • Javadoc 형태 : /** */
  • javadoc 파일명.java 을 통해 주석문 내용 & 클래스 내의 코드들(변수, 메서드, 생성자 정보)가 html 문서로 제공

자바 애플레이션 작성 및 실행

  • 자바 앱 : 바이트 코드로 번역 후 바로 실행가능한 일반 프로그램
  • main() : java 명령어로 프로그램 실행시 자동 호출되어 시작되는 메서드

3) 자바 애플리케이션 구문 분석

  • 블록 {} : 클래스, 메서드, 자바 구문에 사용
  • 세미콜론 ; : 문장을 구분하기 위해 사용
  • java.io : 입출력 작업 패키지
    • System.out.println()
      • System : 클래스
      • out : 변수
      • println : 메서드

4) 식별자와 예약어

식별자

  • 클래스, 변수, 메서드에 주어지는 이름

  • 첫 문자는 영문자, _, $, 유니코드

  • 특수문자 사용 불가

  • 대소문자 구별, 길이 제한 X

  • 예약어 포함가능하나 예약어 자체만은 불가

  • 숫자 가능하나 첫 문자에는 사용 불가

  • 클래스와 상수는 대문자로 시작

  • 메서드와 변수는 소문자로 시작

예약어

  • 시스템에서 일정 특성을 가진 언어를 등록, 데이터 타입이나 프로그램 정의에 활용

  • 소문자로 구성

2. 자바 데이터 타입과 변수

1) 데이터 타입

데이터 타입

  • 데이터의 성격을 규정
  • 데이터타입 변수명;
  • 논리값
    • boolean : 1bit, true false 두 리터럴 값 존재
    • 자바에서는 int와 boolean 간에 형변환 불가능
  • 단일 문자
    • char : 16bit 유니코드 문자데이터, 홑따옴표 사용, 정수형으로 형변환 가능, unsigned 값, \u0000 부터 \uffff표현범위 갖음
    • 특수 문자
      • \n : \u000A
      • \t : \u0009
      • \b : \u0008
      • \r : \u000D
      • \f : \u000C, form feed
      • \\ : \u005C, 백슬레쉬
      • \' : \u0027, 홑따옴표
      • \'' : \u0022, 쌍따옴표
  • 정수
    • signed 형태, 첫 비트가 0이면 양수, 1이면 음수
    • 진수 표기 : 8진수 0, 16진수 0x
    • byte : 부호가 있는 8bit 정수, -128 ~ 127
    • short : 부호가 있는 16bit 정수, -32768 ~ 32767
    • int : 부호가 있는 32bit 정수, -2147483648 ~ 2147483647
    • long : 부호가 있는 64bit 정수, 문자 L 사용, -9223372036854775808 ~ 9223372036854775807
  • 실수
    • float : 부호가 있는 32bit 부동소수점 실수
    • double : 부호가 있는 64bit 부동소수점 실수
    • E, e : 지수
    • F, f : float
    • D, d : double
    • 3.14, 6.02E23, 1.718F

2) 변수의 선언과 초기화

변수

  • 프래그래머가 메모리상의 데이터에 접근하기 위한 방법

  • 컴퓨터 내부 데이터와 1:1 대응

  • 기본형(Primitive type)과 참조형(Reference type) 두 가지 변수가 존재

변수 선언

  • JVM에게 데이터를 저장하기 위한 메모리 할당 요청
  • 데이터타입 변수명 : 하나 이상의 공백 필요
  • int var; : 변수 선언
  • var = 25; : 변수 초기화 (변수에 처음 값이 할당되는 과정)
  • int var = 25;
  • 자동초기화와 각 데이터 유형별 할당 기본값
    • 단, 메서드 안에서 선언된 지역변수는 자동초기화X
    • 0 : byte, short, int
    • 0L : long
    • float : 0.0F
    • double : 0.0D
    • char : \u0000 (Null)
    • boolean : false
    • 참조형 : null
  • String : Class 형
  • 전역 변수와 지역 변수 : 블록안에서 사용 가능

3) 형변환

형변환 연산자 () 사용

  • 큰 데이터 타입으로 변환 : Promotion (묵시적 형변환), 데이터 손실 우려 X, 자동 캐스팅
  • 작은 데이터 타입으로 변환 : Demotion (명시적 형변환), 데이터 손실 우려 O, 명시적 캐스팅
//묵시적 형변환
int age = 25;
double avgAge = age; //double avgAge = (double)age; 와 동일

//명시적 형변환
int sum = 128;
byte data = (byte)sum; // 불가시 전혀 다른값이 할당 (해당 예시에서는 -128값 할당)

3 자바 연산자 및 배열

1. 자바 연산자

1) 산술 연산자

  • 단항 연산자
    • ++
      • ++값
      • 값++

    • --값
    • 값--
  • 이항 연산자
    • /
    • &

2) 비교 연산자

  • 대소 비교, 객체 타입 비교에 사용
  • 비교 연산 수행결과가 boolean 데이터 타입의 결과로 리턴
  • >, >=
  • < , <=
  • ==, !=
  • instanceof

3) 논리 연산자

  • boolean 데이터 타입에 적용, boolean갑으로 리턴
  • &, and
  • |, or
  • &&, || : 단축 연산자
  • ! : boolean값 바꿈

4) 비트 연산자

  • 값을 bit로 연산하는 연산자
  • 메모리 최대한 효율적 활용가능
  • &
  • |
  • ^
  • ~
  • >> : 부호비트에 현재 부호비트값 채워짐
  • >>> : 부호비트에 0 채워짐
  • << : 최우측비트에 0 채워짐

5) 기타 연산자 및 연산자 우선순위

  • 대입 연산자 : 변수에 값을 저장

    • =
    • +=
    • -=
    • *=
    • /=
    • %=
    • &=
    • |=
    • ^=
    • <<=
    • <<<=
    • >>=
  • 다항 연산자 : if else 문장을 축약가능

    • 변수 = 조건 ? 값1 : 값2
  • 최우선순위

    • ()
    • []
    • .

2. 자바의 배열

1) 배열의 개념

  • 배열 : 같은 타입의 데이터 모임
    • 메모리 절약, 쉽고 간결하게 프로그램 작성 가능
    • 객체로 표현, 참조형 사용
String greeting; // String 자료형 greeting 변수 선언
greeting = new String("Hello, Java!"); // greeting 변수에 값 할당
//Hello, Java! 가 String Object로 저장
//greeting에는 위 String Obeject의 주소 저장
  • 변수 선언 : 데이터타입 배열변수명 [] or 데이터타입 [] 배열변수명
  • 배열 객체 생성 : 배열변수명 = new 데이터타입[배열의 길이]
  • int scoreList[] = new int[100];
  • int [] scoreList = { 1, 2, 3, 4, 5};
  • scoreList = new int[] {1, 2, 3, 4, 5}
  • .length : 배열의 길이 리턴
  • [idx] : 배열의 저장된 값 참조

2) 다차원 배열

  • 다차원 배열 = 배열의 배열
  • dataType [][] arrayName
  • dataType [] arrayName []
  • 서로 다른 길이로 생성된 일차원 배열 참조도 가능
    • dataType[][] arrayName = new dataType[3][]
    • arrayName [0] = new int[2];
    • arrayName [1] = new int[3];
    • arrayName [2] = new int[4];

명령행 매개변수

  • 문자열의 배열을 배개변수로 받아, 프로그램 실행 시 필요한 정보를 프로그램에 전달

  • main()의 매개변수 : String args[]

  • 매개변수 전달 : java className arg1 arg2 ...

    • 문자열 => 숫자 : 형변환 필요
      • 자바 APi 메서드
        • Integer.parseInt()
        • Double.parseDouble()
  • run configurations에서 args 설정

4 자바 제어문

1. 자바 제어문

1) 조건 제어문

if 문

  • 조건에 따라 분기
  • else절은 가장 가까운 if 문과 짝을 이룸
  • 수행 Statement가 한 줄일 경우, 블록 생략 가능
if(Expression1) {
    Statement1;
} else if(Expression2) {
    Statement2;
} else {
    Statement3;
}
Statement4;

switch 문

  • Expression 값에 따른 case 활용 다중 분기 처리

Expression 값은 char, byte, short, int 형만 가능

switch (Expression) {
    case value1 :
        Statement1;
        break; // 의도적으로 생략 가능
    case value2 :
        Statement2;
        break;
    default :
        Statement3;
        break;
}
Statement4;

2) 반복 제어문

for

  • for(초기식; 조건식; 증감식){ Statement; }
  • for 블록 내 선언된 변수는 for 블록내에서만 사용가능
  • for 블록 포함 메서드 내의 선언된 변수와 같은 이름으로 선언 불가능

while

  • while(조건식) { Statement; }

do-while

  • do { Statement; } while(조건식);

3) 이동 제어문

수행 흐름을 원하는 곳으로 이동시킬 때 사용

break

  • switch 문 : switch 블록 종료
  • 반복문 : 반복문 종료

continue

  • 반복문 : 현재 단계의 수행 생략하고 다음 단계 실행을 위해 조건부 실행 위치로 옮긴다

return

  • 메서드의 수행을 종료하고 메서드가 호출된 곳으로 제어를 이동시킴

label

중첩된 반복문을 빠져나갈때 사용

  • 특정 반복문에 Lable 설정 : Label : 반복문;

  • 특정 Label로 break 설정 : break [Label]

  • 특정 Label로 continue 설정 : continue [Label]

  • 사용을 권하진 않음

outer : for(i=0; i<5; i++) {
    for(j=0; j<5; j++) {
        if(i+j == 6) {
            break outer;
        }
        System.out.println(i+j);
    }
}