본문 바로가기
개발

[JAVA]JAVA 시험 정리

by plzfday 2018. 4. 25.

JAVA의 특징: JVM에 의해 실행되므로 플랫폼에 독립적.

JAVA의 기본

변수 작성 규칙

  • $으로 시작해도 된다.
  • 예약어 불가능
  • 길이 제한 X

데이터형

Java Data Type
ㄴ Primitive Type(기본형)
    ㄴ Boolean Type(boolean)
    ㄴ Numeric Type
        ㄴ Integral Type
            ㄴ Integer Type(short, int, long)
            ㄴ Floating Point Type(float, double)
        ㄴ Character Type(char)
ㄴ Reference Type(참조형)
    ㄴ Class Type
    ㄴ Interface Type
    ㄴ Array Type
    ㄴ Enum Type
    ㄴ etc.

기본형(32bit 기준)

  • boolean: 1byte(true, false로 소문자다)
  • char: 2byte(Unicode)
  • byte: 1byte
  • short: 2byte
  • int: 4byte
  • long: 8byte
  • float: 4byte
  • double: 8byte
정수형의 기본 타입은 int형이고 실수형의 기본 타입은 double이다.

long a = 10000000000; (Error), cos 정수형 기본 타입은 int이기 때문에 L을 붙여줘야 한다.
float a = 12.45; (Error), cos 실수형 기본 타입은 double이기 때문에 F를 붙여줘야 한다.

참조형

ㄴ Class Type
ㄴ Interface Type
ㄴ Array Type
ㄴ Enum Type

클래스, 배열, 인터페이스, 배열, 열거형이 참조형이다.

이스케이프 문자

특수문자

표시법 

tab 

\t 

backspace 

\b 

new line 

\n 

역슬래시(\)

\\ 

작은따옴표 

\' 

큰따옴표 

\" 

유니코드(16진수)문자 

\u유니코드(ex: \u0041) 

자동 형변환

byte -> short -> (char ->) int -> long -> float -> double

강제 형변환

(타입)변수명

상수

final 키워드

배열(참조형)

순차적으로

  1. 선언: int[] a;
  2. 할당: a = new int[3];
  3. 초기화: a[0] = 1; a[1] = 2;

선언+할당 동시에

int a[] = new int[];

한번에

int a[] = new int[]{1,2,3};
int a[] = {1,2,3};

2차원 배열

똑같다.
int[][] a = new int[3][4];

배열의 길이: a.length

String 타입

Class로 만들어 놓은 데이터 타입
  • 대문자 S로 시작한다.
  • 참조형이다.
  • 데이터를 넣을 때는 '큰 따옴표'로 데이터를 묶어 넣어준다.

String s = "HELLO~"

프로그램 매개변수

public static void main(String[] args) {}가 있는데 String[] args도 매개변수이기 때문에 프로그램 실행시 Arguments를 넘겨줄 수 있다.

연산자 종류 및 우선순위...

정올 공부하면서 외웠기 때문에 적지는 않겠음. 
이미지 삽입 중...

instanceof 연산자의 활용: (객체 instanceof 클래스명) -> boolean형을 반환, 상속관계도 따진다.
>>> 연산자는 >>이랑 비슷한데 앞에 비는 비트들을 0으로 채워준다.

분기문, 반복문

for, while, switch~case, if, 삼항 연산자 등 C/C++과 동일하므로 생략한다.

입력

Scanner 객체를 사용하는데 Scanner는 Java.util에 있다.
예시)
1
2
Java.util.Scanner sc = new Scanner(System.in);
int a = sc.nextInt();



next()는 빈칸때까지 입력 받는다. next타입()은 그 타입에 따른 것을 받는다. nextLine()은 한 줄 전체를 받는다.

Integer.parseInt() 요런 친구도 있다.

객체지향

객체지향 개념

실세계를 컴터 상 객체로 실현함으로써 문제를 해결하는 프로그래밍 기법. 객체는 실체(데이터)와 동작(절차, 방법, 기능)을 모두 포함.

객체

자신이 가지는 데이터와 그 데이터를 처리할 수 있는 행위(메서드)로 구성되는 하나의 단위. 

클래스

객체를 베이스를 정의해 놓은 것. 객체를 생성하는 사용된다.

멤버 변수(속성)

(상태, 필드) : 객체의 정적인 특성을 표현

멤버 메소드(기능)

(행위, 함수) : 객체의 동적인 특성을 표현

OOP 특징

캡슐화: 멤버 변수 같은 중요한 정보들을 숨길 수 있다.

상속: 재사용성을 증대 및 폭넓게 사용 가능해진다.

다형성: 말 그대로 다양한 모습을 가질 수 있다. Overloading, Overriding을 통해 가능.

추상화: 실제로는 복잡한 것들을 필수적인 요소만 간추려서 class에 정의한다.

OOP는 메시지 전달로 이뤄진다.(?)

메시지 전달: 한 객체에서 다른 객체에 값을 전달하거나 메소드를 실행시킨다.

클래스 생성

  1. 선언: Car c1;
  2. 생성: c1 = new Car();
or
  1. Car c1 = new Car();

접근
c1.speed = 50;
c1.speedup();

컴파일

컴파일하면 클래스 개수만큼 [클래스명].class 파일이 생성된다.

생성자

1
2
3
Car() {
    speed = 50;
}


  • new 연산자와 함께 사용, 객체 생성 시에 호출
  • 이름 = 클래스 이름, 첫 문자는 대문자
  • 반환형 X, 매개변수는 0개 이상 가질 수 있다.
  • 생성자를 안 만들면 JVM에서 알아서 디폴트 생성자 만든다.
  • 생성자를 하나라도 만들었으면 디폴트 생성자는 사라진다.

this

this는 객체 자신을 의미하는 것이다.

생성자 오버로딩

생성자를 오버로딩하는데 매개변수 개수, 타입, 순서를 달리해서 정의하는 거다.

클래스 메소드(static 메소드)

  1. static 변수처럼 인스턴스와는 다른 공간에 메모리가 생성되어 사용된다.
  2. 클래스 매소드는 바로 사용이 가능하다.
  3. 클래스 변수(static 변수)만 사용하여 작성해야함.

클래스 변수(static 변수)

  1. new 객체();로 생성되는 것이 아닌 클래스가 로딩되는 순간 자동으로 생성
  2. 아무리 객체가 많이 생겨도 공통된 static 값을 가짐
  3. 클래스가 사라지기 전까지 메모리에 저장되어 사용
  4. static int tvNum = 0; 처럼 static 선언한다.

메소드 오버로딩

같은 클래스 안에서 동일한 이름의 메소드가 여러개 존재.
- 매개변수의 타입, 개수, 순서가 달리하는 것으로 구분한다.

메소드 오버로딩의 조건

  1. 메소드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입 또는 순서가 달라야 한다.
  3. 리턴타입만 다른 경우는 오버로딩이 되지 않는다.

접근 제어자

class에는 public/(default) 가능
변수, 메소드에는 public/(default)/protected/private 가능

  • 생성자: 대부분의 생성자의 접근제어자는 클래스의 접근제어자와 일치 or public을 많이 사용
  • 멤버변수: 캡슐화와 정보은닉을 위해 private을 사용
  • 메서드: 접근을 위해 public을 많이 사용
private: 클래스 내부
(default): 클래스 내부, 동일패키지
protected: 클래스 내부, 동일패키지, 상속받은 클래스
public: 클래스 내부, 동일패키지, 상속받은 클래스, 모든 클래스

상속

- 기존의 있는 클래스의 멤버변수나 메서드를 물려받아 새로운 클래스를 만드는 것.
- OOP의 주요 특징인 코드의 재사용을 구현할 수 있다.
- 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외)
- 자손의 멤버개수는 조상보다 같거나 많다.
- 자바는 단일 상속만 지원한다.

※ 상속은 IS-a관계이다. 택시는 자동차이다(O), 자동차는 택시이다(X)
※ 사용법: extends
1
Taxi extends Car {}


상속, 생성자, super

- 자손은 조상의 생성자를 상속 받지 못한다.
- 조상의 default 생성자가 없으면 에러가 날 수 밖에 없다.
-> 해결 방법!
디폴트 생성자 추가, 또는 하위 클래스에서 super를 이용해 명시적으로 호출해준다.
super는 this처럼 조상의 객체를 참조할 수 있는 참조변수

super(); 처럼 사용한다.

super();은 생성자에서 항상 맨 첫 줄에 등장해야한다.

오버라이딩

- 조상클래스에 있는 메서드를 하위 클래스에서 동일한 이름으로 다시 정의하여 사용하는 것.

오버라이딩 조건
  1. 상위 클래스 메서드의 이름, 매개변수, 반환형에 대해서 완전히 같아야 한다.
    [public, protected, (default)] void speedUp() { /* 실행부분 */ }
  2. static, final, private 메서드인 경우에는 오버라이딩 할 수 없다.
  3. [접근제어자]는 동일 범위거나 넓은 범위로 지정해야 한다.
    조상의 메서드가 protected라면 protected나 public으로만 변경가능하다.


댓글