java 코테 준비

이도원·2022년 11월 22일
0

Java 문법

목록 보기
1/8

기본 자료형

베이스

값이 존재하지 않는 변수는 메모리를 할당하지 않는다.(선언 후 할당안하면 메모리 차지x)
리터럴 상수는 그냥 숫자임
변수 앞에 final 키워드를 붙인 변수는 값이 저장된 이후에 값을 변경할 수 없음.(심볼릭 상수)

final int num=1; //선언하며 초기화 (초기화안하고 선언만하고 나중에 가능)

접미사L(21억 넘는 정수에 필요4->8), 접미사F(8->4byte에 할당)

123.123F !=123.123 // 할당된 byte가 달라서 서도 다른 값이다.

암시적 형 변환 - 더 큰 범위의 자료형으로 변환은 오류 x
명시적 형 변환 - 더 작은 범위의 자료형으로 변환 (데이터 손실 발생할 수 있음)

float a = 1.12F; double b=a;	// 암시적 (연산에도 적용)
int a = (int) 100000000000L; // 명시적

객체 - 현실 세계에 존재하는 것을 프로그램으로 구현할 대상
클래스 - 클래스는 현실 세계의 객체를 프로그래밍의 세계로 가져와서 실제로 구현한 것
인스턴스 - 클래스를 통해 객체를 메모리에 적재한 실체

멤버변수 - 클래스 내에 선언된 변수(인스턴스 변수와 정적 변수로 나뉨)
인스턴스 변수 - 인스턴스를 생성 후에 접근 가능한 변수(인스턴스가 소멸하면 인스턴스 변수도 소멸)
정적 변수 - 인스턴스를 생성하지 않아도 접근 가능한 변수(모든 인스턴스에서 공유)

생성자 오버로딩 - 여러개의 생성자를 선언(같은 자료형의 매개변수로는 불가, 구별X)
this - 객체 자기 자신

메서드
반환값없는 return 키워드를 이용하여 메서드 실행을 종료 가능(ex 자식 여러명)
인스턴스 메서드 - 인스턴스 변수와 같이 인스턴스를 생성 후에 호출
정적 메서드 - 객체를 인스턴스화하지 않고 사용가능(static, 내부 인스턴수 변수에 접근 못하나 정적 변수에는 접근 가능)
메서드 오버로딩 - 생성자처럼 메서드도 오버로딩 가능(매개변수의 개수나 자료형 다르면)

class Person {
    String name; // 인스턴스 변수
    int age;
    static string nationality = “korea”; // 정적 변수
    Person(String name, int age) { //생성자
        this.name = name;
       	this.age = age;
    }
    Person(int age) { //여러개 생성자 가능(생성자 오버로딩)
        this.age = age;
    }
    void setName(String name) {	// 반환값이 없고 매개변수가 있는 메서드
        this.name = name;
    }
    String getName() {	// 반환값이 있고 매개변수가 없는 메서드
        System.out.println(name);
        return name;
    }
    static int plus(int a, int b) {	//정적 메서드 
        return a + b;	//age사용 불가,nationality사용가능
    }
}
Person person = new Person("이름", 1); //생성자 통해 초기화

패키지 - 폴더 구조와 유사
package codelatte와 package codelatte.car는 서로 다른 패키지
서로 다른 패키지에 있는 자바의 클래스를 참조하려면 import 키워드 작성 필요

pakage codelatte;
import codelatte.car.Car

private - 클래스 내부에서만 접근 가능
public - 모든 곳에서 접근 가능한 가장 열려있는 접근제어 지시자
default - private,public 사용 안하면 같은 패키지 내에서만 접근 가능
protected - 다른 패키지 내에서 접근 불가(상속으로는 접근 가능)
상속 - extends 사용, 상속을 받을 수 있는 요소는 변수와 메서드(생성자는 X)
ChildDog 클래스에 변수나 메서드를 선언하지 않아도 접근 가능(ParentDog 메서드,변수)
super - 부모 클래스에 접근
부모 생성자가 명시적으로 선언되어 있는 경우 자식 클래스에서 부모 생성자 중 하나 반드시 호출
기본 생성자(매개변수가 없는 생성자)만 있거나, 명시한 생성자 없으면 생략 가능

public class ParentDog {
    String name;
    ParentDog(String name) {
        this.name = name;
    }
}
public class ChildDog extends ParentDog {
	ChildDog(String name) {
        super(name); // ParentDog클래스 생성자 호출(ParentDog(String name)에 매칭)
    }
}

다형성 - 하나의 객체 인스턴스가 여러가지 자료형 가질 수 있음
instanceOf 연산자는 해당 인스턴스가 특정 인스턴스가 맞는지 확인할 수 있는 연산자

메서드 오버라이딩 - 자식 클래스에서 정의한 내용을 더 우선시(부모 클래스 매서드 재정의)

추상화
abstract 클래스

  • 생성자를 정의 가능
  • 단독 인스턴스를 생성 불가.(확장해야지 사용 가능하다)
  • 추상 메서드를 사용 시 abstract 키워드가 선언 필요.
  • abstract 메서드는 확장하는 클래스에서 내용을 정의해야 하므로 private 지시자를 선언 불가
  • 확장하는 클래스는 abstract 메서드를 반드시 override 해야 하며 구현체가 존재해야 함

abstract 메서드

  • abstract 메서드는 메서드의 이름과 반환형, 매개 변수만 선언하고 내용에 대해서는 정의하지 않음. 내용에 대한 정의는 확장(extends)하는 클래스에 위임
  • abstract 메서드는 내용이 정의되어 있지 않기 때문에 확장하는 클래스에서 abstract 메서드를 반드시 Override 해야 함
public abstract class Dog {
    protected String name;

    public Dog(String name) {
        this.name = name;
    }

    public abstract void bite();

    public abstract void bark();

    protected void eat() {
        System.out.println("먹는다");
    }
}

interface

  • 생성자를 선언 및 정의X
  • 인터페이스 내에서 선언하는 변수는 모두 public static final이 선언된 변수임.
  • default 메서드나 static 메서드는 모두 public이 선언된 메서드
  • default, static 아닌 메서드는 모두 public abstract가 선언된 메서드
  • 상속받는 클래스는 abstract 메서드를 반드시 override 해야 하며 구현체가 반드시 존재해야 함.
  • 인터페이스의 내용을 실제로 구현하는 클래스는 인터페이스를 implements해야 함.
public interface Dog {
    public static final String color = "검정";

    public abstract void bite();

    public abstract void bark();

    public default void eat() {
        System.out.println("먹는다");
    }

    public static String getColor() {
         return color;
    }
}

사실 좀 더 자유도가 높은 것은 추상 클래스이나, 추상 클래스는 확장에 의미가 더 가깝고 인터페이스는 규약에 가깝기 때문에 인터페이스를 더 많이 사용함

익명클래스 - 코드 내부에 이름이 존재하지 않는 클래스를 만드는 것
람다 - 익명함수
모든 클래스는 Object 클래스를 상속 -> Object 클래스의 요소를 사용 가능

null -참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 저장되는 값

예외 처리 - try catch finally

enum - 자바 가상 머신에 의해 Singleton으로 생성되며 의미 있는 상수를 정의하고 프로그램의 안정성을 위해 사용'

Generic - Actual Type Parameter가 삽입된 경우 정상적인 Type인지 컴파일 단계에서 체크해주는 도구

Wrapper 클래스 - 기본 자료형(Primitive Type)을 감싸는(기본 자료형 이용 연산보다 느림)
int->Integer, char->Character
Wrapper 클래스에는 기본적으로 형변환에 도움이 되는 몇 가지 메서드를 제공

Integer integer = new Integer(10);	//Wrapper 클래스로 만들어진 인스턴스
int integer1 = integer.intValue();	//반환
//메서드
Integer.parseInt(string);	//정적 메서드를 이용하여 int 정수형으로 변환
Integer.toString(int);	//정적 메서드를 이용하여 문자열로 변환
Byte.MAX_VALUE;	//자료형의 최댓값 
Integer.MIN_VALUE;	//자료형의 최솟값

스레드 사용

https://www.codelatte.io/courses/java_programming_basic/3YOZQA8ZUYBPYNHY

연산자

논리연산자 && -> and, || -> or / 비트연산자 ^ -> xor, & -> and, | -> or
실수형끼리 비교 연산자 결과는 정확하지 않음 (정수와 실수 또한 마찬가지)
삼항연산자 자료형 변수명 = (조건식) ? (참인 경우)값 : (거짓인 경우)값;

조건문

if (참 or 거짓) {	// 참이면 실행 후 조건문 탈출
} else if (참 or 거짓) {	// 참이면 실행 후 조건문 탈출
} else if (참 or 거짓) { 	// 참이면 실행 후 조건문 탈출
} else {	// 세 조건이 다 거짓이면 실행 후 탈출
}
switch (조건값) {
    case1 :	// 조건값이 '값1'이면 해당 위치 부터 실행 후 아래의 case로 진행
    case2 :	// 조건값이 '값2'이면 해당 위치 부터 실행 후 아래의 case로 진행
    case3 :	// 조건값이 '값3'이면 해당 위치 부터 실행 후 아래의 case로 진행
    default: //조겁값 관계없이 실행
} // break를 통해 탈출하면 해당 case문만 실행 가능

반복문

for (초기화 ; 조건식; 반복 후 실행될 명령어) {
    // 반복 시킬 내용
}
for (변수 : 배열 or 이터레이터) { //배열,이터레이터 순차 접근
    // 반복 시킬 내용
}
while (조건식) {
    // 반복 시킬 내용
}

do {
    // 반복 시킬 내용
} while(조건식);

break; //반복문 탈출
continue; //다음 반복으로!

종합

https://www.codelatte.io/courses/java_programming_basic/003LDC73H3M2GUUW

profile
studying

0개의 댓글