Java

이경준·2021년 9월 27일

면접

목록 보기
2/4

변수

값이 변하는 수

  • 변수의 의미와 목적이 분명하게 나타나야 함
  • 비슷한 이름, 줄임말 사용 지양
  • 대소문자 구분 / 숫자로 시작할 수 없음
  • 띄어쓰기, 예약어 사용 불가
  • Camel Case 사용 / 특수문자는 $와 _만 사용 가능

자료형

  • 정수형 : byte, short, int, long
  • 문자형 : char
  • 실수형 : float, double
  • 논리형 : boolean

final : 변하지 않아야 하는 상수를 지정
String 클래스 : 문자열 저장


형 변환

묵시적 형변환 : 바이트 크기가 작은 자료형에서 큰 자료형으로 대입하는 경우
명시적 형변환 : 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우


주석 (Comment)

// 한 줄

/*	여러 줄
 *
*/

연산자

대입 연산자 : =
부호 연산자 (부호를 나타냄) : + -
산술 연산자 : + - (곱하기) / % (순서 : % 는 '곱하기', '나누기' 와 같음)
증가/감소 연산자 : ++ --
관계 연산자 : < > >= <= !=
논리 연산자 : && || ! (각각 and, or, not 에 해당함)
복합 대입 연산자 : += -= *= /= %=
조건 연산자 : 조건식 ? 결과1 : 결과2 (조건식이 참이면 결과1, 조건식이 거짓이면 결과2 선택)


조건문

if-else 문
if / else if / else

switch-case 문

int age = n
char grade;
switch (age) {
    case 20 : grade = 'one';
    	break;
    case 21 : grade = 'two';
    	break;
    default : grade = '?';
}

자바의 함수들

  • String.equals(비교값) : 변수명과 비교값 비교 (T/F 반환)
  • String.equalsIgnoreCase(비교값) : 문자열의 대소문자를 가리지 않고 비교
  • String.indexOf() : ~의 인덱스 값 반환 (없으면 -1 반환)

문자열 함수

수학 함수


반복문

for문, while문
continue, break


Array

# 정수형 배열 선언
int[] scores = new int[4];

# 값 할당
scores[0] = 100;

# 2차원 배열
int[][] arr = new int[n][m];
  • 한번 정의된 배열의 크기는 줄이거나 늘릴 수 없음
  • Array를 복사할 경우 얕은 복사 / 깊은 복사 개념

ArrayList

배열의 크기를 원하는대로 추가/삭제 할 수 있음

# 선언
ArrayList<Integer> scores = new ArrayList<Integer>();

# 추가
scores.add(100);

# 값 추출 (인덱스 사용)
int result = scores.get(0)

# 길이 확인
int scoresSize = scores.size();

# 값 삭제 (인덱스 사용)
scores.remove(0);

Wrapper Class

  • ArrayList를 사용할 때는 Java에서 Primitive Type이라 불리는 ~ 타입을 사용할 수 없다. 따라서 Java에서 미리 준비한 Wrapper Class를 사용해야 한다.

Map

  • 파이썬의 딕셔너리와 같다고 보면 된다.
  • Key는 중복되지 않으므로, 중복되는 Key가 들어오면 기존의 Key는 갱신된다.
# 선언
Map<String, Integer> scores = new HashMap<String, Integer>();

# 추가 (Key, Value)
scores.put("Java", 100);

# 값 추출
int cScore = scores.get("Java");

# 삭제
scores.remove("Java");

변수의 범위 (Scope of variables)

  • 멤버변수 (Instance Variable) : 클래스 아래에 선언되어 클래스 안에서 자유롭게 사용할 수 있는 변수)
  • 지역변수 (Local Variable) : 클래스가 아닌 곳 중괄호 안에 선언되어 특정 영역에서만 사용할 수 있는 변수)
  • 지역변수와 멤버변수는 중괄호( {} )로 구분된다.

클래스

  • 클래스 : 어떤 목적을 달성하기 위해 필요한 기능들과 변수들을 하나로 묶어 분리시켜놓은 모듈

  • 한번 정의된 클래스는 필요시 여러번 호출해 사용함으로써 코드의 재사용을 극대화

  • 자바 프로그램은 모든 요소가 클래스 내부에 있어야 한다.

  • 클래스 외부에는 package 선언과 import 문장 외에 아무 것도 선언하지 않는다.

  • 클래스를 사용하여 프로그램을 실행하려면 먼저 main() 함수를 만들어야 한다.

  • main() 함수 : JVM이 프로그램을 시작하기 위해 호출하는 함수

클래스로 필요한 기능들을 정의했다면, 이것을 사용하기 위해 클래스를 반드시 객체화시켜 객체(변수)로 만들어야 한다.

객체 : 의사나 행위가 미치는 대상 (생성된 클래스의 인스턴스를 객체라고도 함)
클래스 : 객체를 코드로 구현한 것
인스턴스 : 클래스가 메모리 공간에 생성된 상태

  • 변수는 값을 저장(할당)하고, 객체는 값이 아닌, 메모리의 주소를 저장(할당)한다.

Package / Import

Java Programming은 여러개의 Class로 만들어진다. 수많은 Class를 효율적으로 관리하기 위해 용도/종류별로 구분해 정리하는데 이것을 Package라고 한다.

  • Package에 Class를 생성하면 Class 생성 포멧에 package 키워드가 추가된다.
  • 다른 Package의 Class를 사용하기 위해서는 반드시 Import가 필요하지만 예외도 있다.
    자주 사용되는 Class에 대해서는 Import를 생략할 수 있다. (String, Wrapper Class, Exception 등)

메소드

메소드 : 함수의 한 종류로서 데이터의 처리과정을 하나의 묶음으로 묶어놓은 것이다. 복잡하거나 수차례 반복되는 과정을 하나로 분리시켜 관리하기 위해 사용한다.

장점

  • 기능을 나누어 코드를 효율적으로 구현할 수 있다.
  • 기능별로 함수를 구현해 놓으면 매번 해당 기능을 만들 필요 없이 호출만 하면 된다. ==> 편리함
  • 오류가 난 기능만 찾아서 수정하면 된다. ==> 오류 수정하는 디버깅 작업을 할 때 편리하다.

접근 제한자

  • 메소드 혹은 변수마다 접근의 범위를 제한하기 위해 사용한다.
  • 정보은닉 (information hiding) : 객체 지향에서는 클래스 내부에서 사용할 변수나 메서드는 private으로 선언해서 외부에서 접근하지 못하도록 하는 것을 말한다.

메소드 오버로딩

동일한 메소드명을 여러개 정의하는 것

조건 (1은 필수 / 2나 3 중에 하나만 충족해도 된다.)
1. 같은 메소드 명
2. 다른 파라미터(매개변수) 타입
3. 다른 파라미터(매개변수) 개수


생성자

  • 클래스가 객체화될 때 단 한번 실행되는 초기화 메소드
  • 클래스를 생성할 때만 호출한다.
  • 생성자 이름은 클래스 이름과 같고, 생성자는 반환값이 없다.

생성자 오버로드 : 클래스에 생성자가 두 개 이상 제공되는 경우


static

  • 클래스에 선언된 메소드나 멤버변수는 반드시 객체화 시켜야 사용할 수 있다. 만약, 메소드를 인스턴스화 시키지 않고 사용하고 싶다면 static을 사용해야 한다.
  • static 변수는 같은 클래스에서 생성된 인스턴스들이 같은 값을 공유할 수 있으므로, 인스턴스 간에 공통으로 사용할 값이 필요한 경우 유용하게 사용할 수 있다.
  • static 변수는 클래스에 속해 한 번만 생성되는 변수이고 이를 여러 인스턴스가 공유한다. 이러한 이유로 '클래스 변수' 라고도 한다. static 변수를 위한 메소드는 'static 메소드' 또는 '클래스 메소드' 라고 한다.

객체 참조

클래스로 만든 객체의 주소 또는 참조값에 해당


상속

  • A 클래스가 B 클래스에게 상속한다. (B 클래스가 A 클래스를 상속받는다.)
  • protected : 하위 클래스에서 사용할 수 있도록 지정하는 예약어 (protected로 선언한 변수를 사용하기 위해서는 get(), set() 메소드를 추가해야 한다.)
  • 메소드 오버라이딩 : 상위클래스에 정의한 메소드가 하위 클래스에서 구현할 내용과 맞지 않을 경우에 하위클래스에서 이 메소드를 재정의 (오버라이딩을 위해서는 반환형, 메소드 이름, 매개변수 개수, 자료형이 같아야 한다.)

IS-A 관계 : 일반적인 개념과 구체적인 개념의 관계 (포유류 - 사람)
HAS-A 관계 : 한 클래스가 다른 클래스를 소유한 관계 (학생 - 과목)

  • 상속은 '일반적인 클래스'와 '구체적인 클래스'의 관계에서 구현해야 한다.

추상클래스

  • 추상클래스는 항상 추상메소드를 포함한다.
  • 추상클래스는 모든 메소드가 구현되지 않았기 때문에, 인스턴스로 생성할 수 없다.
  • 하위클래스에서 내용을 각각 다르게 구현해야 한다면, 구현 내용을 추상 메소드로 남겨두고 하위 클래스에 구현을 위임한다.
  • 상속받는 클래스는 extends 사용

추상메소드 : abstract를 예약어를 사용하여 선언만 하고, 메소드 { } 대신 ;를 쓴다.


인터페이스

인터페이스

  • 한 클래스가 여러 인터페이스를 구현할 수 있다.

  • 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것

  • 자바의 다형성을 극대화하여 개발코드 수정을 줄이고, 프로그램 유지보수성을 높이기 위해 사용

  • 클래스를 정의할 때 implements 키워드를 사용한다.


예외처리

예외처리 : 예외가 발생하더라도 프로그램이 비정상 종료되지 않도록 하는 방법

  • 프로그램이 비정상 종료되는 것을 방지
  • 프로그램의 예외 상황 자체를 막을 수는 없지만, 예외 상황을 알려주는 메시지를 볼 수 있고, 프로그램이 비정상 종료되지 않고 계속 수행되도록 만들 수 있다.
  • 예외 발생 여부와 상관없이 마지막에 반드시 실행되어야 하는 코드가 있다면 finally 이용
  • throw를 사용하여 예외를 해당 메소드에서 처리하지 않고 미룬 후, 메소드를 호출하여 사용하는 부분에서 예외처리를 할 수 있다. (각 예외상황마다 다르게 처리해야하고 로그도 다르게 남겨야 한다면 사용)
  • 예외 클래스를 직접 만들어 사용할 수도 있다.


컬렉션 프레임워크

  • 자바에서 필요한 자료 구조를 미리 구현하여 java.util 패키지에서 제공하는 라이브러리

<Collection 인터페이스>

  • List : 순차적인 자료를 관리
  • Set : 집합

<Map 인터페이스>
쌍으로 선언되어 있는 자료를 관리하는 메소드


내부클래스

  • 클래스 내부에 선언한 클래스
  • 외부클래스 내부에서만 생성하여 사용하는 객체를 선언할 때 사용
profile
The Show Must Go On

0개의 댓글