본문 바로가기
JAVA

JAVA 공부

by Korea_yohan94 2021. 12. 24.

*기계어 : 0과1로 이루어진 이진 코드, 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍언어가 필요하다

*프로그래밍 언어는 고급언어와 저급언어로 구분

*고급언어란 컴퓨터와 대화할 수 있도록 만든 언어 중에서 사람이 쉽게 이해할 수 있는 언어를 말한다.
고급언어로 작성된 소스는 컴퓨터가 바로 이해할 수 없기 때문에 컴파일(compile) 과정을 통해서 컴퓨터가 이해할 수 있는 0과 1로 이루어진 기계어로 변환한 후 컴퓨터가 사용한다.

*저급언어란 기계어에 가까운 언어를 말하는데 대표적으로 어셈블리어가 저급언어에 속한다.

*자바의 특징
1. 이식성이 높은 언어이다.
이식성이란 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수있는 것을 말한다.
자바 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도, 자바 실행 환경(JRE : Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능하다.
JDK : Java Development Kit

2. 객체 지향 언어이다.
프로그램을 개발하는 기법으로 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립및 연결해서 전체 프로그램을 완성하는 기법을 객체 지향 프로그래밍(OOP : Object Oriented Programming)이라고 한다. 이때 사용되는 언어를 객체 지향 언어라고 한다.
자바는 100% 객체 지향 언어이다. 캡슐화, 상속, 다형성 기능을 완벽하게 지향하고 있다.

*디버깅(debugging)이란 모의 실행을 해서 코드의 오류를 찾는 것을 말한다. 프로그램 개발단계중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작업과정

*워크스페이스(Workspace)란 이클립스에서 생성한 프로젝트가 기본적으로 저장되는 디렉토리

*소스 코드 내에서 직접 입력된 값을 리터럴(literal)이라고 부른다. 

*byte 범위 = -128~127, byte변수는 127을 넘어가는 순간 최소값인 -128부터 다시 저장된다.

*char c = ' '; 작은 따옴표에 공백이 있어야 초기화가 된다.

*String str =""; String 변수는 큰 따옴표 두 개를 연달아 붙인 빈 문자를 대입해도 괜찮다.

*long타입의 변수를 초기화할 때에는 정수값 뒤에 소문자  'l'이나 대문자'L'을 붙일 수 있다. int 타입의 저장 범위를 넘어서는 정수는 반드시 소문자나 대문자 'L'을 붙여야 한다. 그렇지 않으면 컴파일 에러가 난다.

*실수 타입(float, double) 자바는 실수 리터럴의 기본 타입을 double로 간주한다. 그렇기 때문에 float 타입 변수에 그냥 저장할 수 없다. 실수 리터럴을 float  타입 변수에 저장하려면 리터럴 뒤에 소문자 나 대문자 'F'를 붙여야 한다.

*강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것을 강제 타입 변환(캐스팅 : Casting)이라고 한다.

*부호 연산자를 정수 또는 실수 타입 변수 앞에 붙일 수도 있다. 이경우 +연산자는 변수 값의 부호를 유지하고, -연산자는 양수는 음수로, 음수는 양수로 바꾼다

*토글(toggle) 두가지 상태(true/false)를 번갈아가며 변경하는 기능

*문자열과 숫자가 혼합된 + 연산식은 왼쪽에서부터 오른쪽으로 연산이 진행된다. 
"JDK" + 3 +3.0 = JDK33.0
3 + 3.0 +"JDK" = 6.0JDK

*반복문(for,while)에서의 continue문은 반복문을 종료하지 않고 계속 반복문을 수행한다는 점이 break문과 다르다

*필드(Field) 객체의 데이터가 저장되는 곳

*생성자(Constructor) 객체 생성 시 초기화 역할 담당

*메소드(Method) 객체의 동작에 해당하는 실행 블록

*메소드 오버로딩(overloading) 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것

*정적(static)은 '고정된'이란 의미를 갖는다. 정적 멤버는 클래스에  고정된 멤버로서 객체를 생성하지 않고 사용할 수있는 필드와 메소드를 말한다. 정적멤버는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스멤버라고도 한다.

*접근제한자 접근가능 대상
public 모든 대상
protected 같은 패키지 또는 자식 클래스
default 같은 패키지에 소속된 클래스
private 클래스 내부

*어노테이션(Annotation)은 메타데이터(metadata)라고 볼 수 있다. 

*메타데이터란 애플리케이션이 처리해야 할 데이터가 아니라, 컴파일 과정과 실행과정에서 코드를 어떻게 컴파일 하고 처리할 것인지를 알려주는 정보이다.

*class 자식클래스 extends 부모클라스{}

*final 수정불가능(최종상태)

*변수.length 는 변수의 길이값을 나타냄

*강제타입 변환(Casting)선언문
자식클래스 변수 = (자식클래스) 부모클래스타입;
    부모클래스타입= 자식타입이 부모타입으로 변환된 상태(부모클래스명 쓰면 됨)
*추상(abstract)은 실체 간에 공통되는 특성을 추출한 것을 말한다.

*실체클래스는 객체를 직접 생성할 수 있는 클래스

*추상클래스는 공통적인 특성을 추출해서 선언한 클래스
추상클래스(부모)와 실체클래스(자식)는 상속의 관계를 가지고 있다. 추상클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다. 객체를 직접 생성해서 사용할수 없다, 다시말해 new연산자를 사용해서 인스턴스를 생성시키지 못한다. 

*추상클래스의 선언
클래스 선언에 abstract키워드를 붙여야 한다. 
public abstract class 클래스{}

*객체 타입 확인(instanceof)은 자식 타입이 부모 타입으로 변환되어 있는 상태에서만 가능
boolean result = 좌항(객체) instanceof 우항(타입)

*인터페이스(부모) -  구현클래스(자식)
public interface 인터페이스명{} - public class 클래스명 implements 인터페이스명

*인터페이스(interface)는 객체의 사용 방법을 정의한 타입이다, 개발 코드와 객체가 서로 통신하는 접점 역할을 한다.
상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용방법이 동일한 클래스를 만드는 기술이다.

*인터페이스 선언은 class 키워드 대신에 interface 키워드를 사용한다.
public interface 인터페이스명 {
  부모클래스의 추상메소드 정의
}

*다중 인터페이스 구현클래스
public class 구현클래스명 implements 인터페이스A, 인터페이스B{
 //인터페이스 A에 선언된 추상 메소드의 실체 메소드 선언
 //인터페이스 B에 선언된 추상 메소드의 실체 메소드 선언
}

*객체 타입 확인(instanceof)
강제 타입 변환은 구현 객체가 인터페이스 타입으로 변환되어 있는 상태에서 가능하다.
Bus = 구현객체 , vehicle = 인터페이스 객체

if(vehicle instanceof Bus){
Bus bus = (Bus) vehicle;
}

*try-catch-finally
예외 발생 가능 코드  - 예외 처리 - 항상 실행

*try-with-resources
예외 발생 여부와 상관없이 사용했던 리소스 객체의 close() 메소드를 호출해서 안전하게 리소스를 닫아준다.
*리소스란 데이터를 읽고 쓰는 객체

*예외 떠넘기기(throws)란 메소드 선언부 끝에 작성 되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 한다.throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열해주면 된다.
* 리턴타입 메소드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {}

모든예외를 떠넘길때에는
* 리턴타입 메소드명(매개변수, ...) throws Exception{}

*API(Application Programming Interface) 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음을 말한다
*API 도큐먼트는 쉽게 API를 찾아 이용할 수 있도록 문서화한 것을 말한다

*java.lang 패키지
Object -자바 클래스의 최상위 클래스로 사용
System -표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용
-표준 출력장치(모니터)로 출력하기 위해 사용
-자바 가상 기계를 종료시킬 때 사용
-쓰레기 수집기를 실행 요청할 때 사용
Class -클래스를 메모리로 로딩할 때 사용
String -문자열을 저장하고 여러 가지 정보를 얻을 때 사용
StringBuffer, StringBuilder -문자열을 저장하고 내부 문자열을 조작할 때 사용
Math -수학 함수를 이용할 때 사용
Wrapper (Byte, Short, Character, Integer, Float, Double, Boolean, Long) -기본 타입의 데이터를 갖는 객체를 만들 때 사용
-문자열을 기본 타입으로 변환할 때 사용
-입력값 검사에 사용

*java.util 패키지
Arrays -배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용
Calendar -운영체제의 날짜와 시간을 얻을 때 사용
Date -날짜와 시간 정보를 저장하는 클래스
Objects -객체 비교, 널(null) 여부 등을 조사할 때 사용
StringTokenizer -특정 문자로 구분된 문자열을 뽑아낼 때 사용
Random -난수를 얻을 때 사용

*객체비교(equals())
public boolean equals(Object obj){}

*객체 해시코드(hashCode())란 객체를 식별할 하나의 정수값을 말한다. hashCode()메소드는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.
hashCode() 메소드를 실행해서 리턴된 해시코드 값이 같은지를 본다. 해시코드 값이 다르면 다른 객체를 판단하고, 해시코드 값이 같으면 equals() 메소드로 다시 비교한다. hashCode()메소드가 true가 나와도 equals()의 리턴값이 다르면 다른 객체가 된다

*객체 문자 정보(toString()) Obcject 클래스의 toString()메소드는 객체의 문자 정보를 리턴한다. toString()메소드는 "클래스명@16진수해시코드"로 구성된 문자 정보를 리턴한다.

*객체복제(clone())는 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는 것을 말한다.

*문자추출(charAt())
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);
실행결과 = '프' 출력

*문자열 찾기(indexOf())
String subject = "자바 프로그래밍";
int index = suvject.indexOf("프로그래밍");
실행결과 = index에 3이 저장됨. 문자열의 인덱스 위치가 3이기 때문

*문자열 길이(length())
String subject = "자바 프로그래밍";
int length = subject.length();
실행결과 = length에 8 저장, 공백포함 8문자이기 때문

*문자열 대치(replace())
String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("자바", "JAVA")
실행결과 = JAVA 프로그래밍

*문자열 잘라내기(substring())
String ssn = "880815-1234567";
String firstNum = ssn.substring(0, 6);
String secondNum = ssn.substring(7);
실행결과 = 880815
   1234567

* 배열의 오름차순 정렬 
Arrays.sort()메서드의 매개값으로 기본 타입 배열이나 String배열을 지정해주면 자동으로 오름차순 정렬이 됩니다.

*기본타입 배열 오름차순 정렬
import java.util.Arrays;

public class Sort{
    public static void main(String[] args)  {
        int arr[] = {4,23,33,15,17,19};
        Arrays.sort(arr);
        
        for (int i : arr) {
            System.out.print("["+i+"]");
        }
    }
}

*String 배열 오름차순 정렬
import java.util.Arrays;

public class Sort{
    public static void main(String[] args)  {
        String arr[] = {"apple","orange","banana","pear","peach","melon"};
        Arrays.sort(arr);
        
        for (String i : arr) {
            System.out.print("["+i+"]");
        }
    }
}

*배열의 내림차순 정렬 
배열을 내림차순으로 정렬할 때는 Collections 클래스의 reverseOrder() 함수를 사용하면 됩니다. 만약 기본 타입 배열을 내림차순으로 정렬하고 싶다면 기본 타입의 배열을 래퍼클래스로 만들어 Comparator를 두번째 인자에 넣어주어야 역순으로 정렬할 수 있습니다.
※ String은 기본 타입이 아님

*기본타입 배열 내림차순 정렬
import java.util.Arrays;

public class Sort{
    public static void main(String[] args)  {
        Integer arr[] = {4,23,33,15,17,19};
        Arrays.sort(arr,Collections.reverseOrder());
        
        for (int i : arr) {
            System.out.print("["+i+"]");
        }
    }
}

*String 배열 내림차순 정렬
import java.util.Arrays;

public class Sort{
    public static void main(String[] args)  {
        String arr[] = {"apple","orange","banana","pear","peach","melon"};
        Arrays.sort(arr,Collections.reverseOrder());
        
        for (String i : arr) {
            System.out.print("["+i+"]");
        }
    }
}

*박싱(Boxing)과 언박싱(Unboxig)
기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxig)이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라고 한다.

 

*CharSequence

CharSequence는 클래스가 아니라 인터페이스이다. char값을 읽을 수 있는 시퀀스이며 다양한 종류의 char 시퀀스에 대해 균일한 읽기 전용 접근 권한을 제공한다.

 


*extends 
사실상 extends가 상속의 대표적인 형태다.
부모에서 선언 / 정의를 모두하여 자식은 메소드 / 변수를 그대로 사용할 수 있다.
'다중상속'을 지원하지 않는다.

 

*Implements (interface 구현)
부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩(재정의)해서 사용한다.
(extends가 못하는) 다중상속을 대신해준다.

 

*abstract
extends와 implements의 혼합, extends하되 몇 개는 추상 메서드로 구현되어 있다.


Object 클래스를 제외한 모든 클래스의 생성자의 첫줄에는 반드시 자신의 클래스의 또다른 생성자, this() 또는 부모 클래스의 생성자, super()

*this란?
현재 클래스의 인스턴스를 의미합니다.
즉, 현재 클래스의 멤버변수를 지정할때 사용합니다.


*super란?
자식 클래스에서 상속받은 부모 클래스의 멤버변수를 참조할때 사용합니다


*super()란?
자식 클래스가 자신을 생성할 때 부모 클래스의 생성자를 불러 초기화 할때 사용됩니다. (기본적으로 자식 클래스의 생성자에 추가됩니다.)

 

*volatile 변수

변수를 선언할 때 앞에 volatile을 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듭니다.

 

모델(Model) : 데이터 혹은 데이터를 처리하는 영역을 의미합니다.

뷰(View) : 결과 화면을 만들어 내는 데 사용하는 자원을 의미합니다.

컨트롤러(Controller) : 웹의 요청(request)을 처리하는 존재로 뷰와 모델 사이의 중간 통신 역할을 합니다.

'JAVA' 카테고리의 다른 글

JSP 공부  (0) 2021.12.24