CoDream

[JAVA] 이론 끝! 본문

JAVA/JAVA 이론

[JAVA] 이론 끝!

코잠 2024. 3. 22. 15:47
728x90
반응형

연산자

산술연산자

  • +: 덧셈을 수행합니다.
  • **-** : 뺄셈을 수행합니다.
  • *: 곱셈을 수행합니다.
  • /: 나눗셈을 수행하며, 정수 나눗셈의 경우 몫을 반환합니다.
  • %: 나머지 연산을 수행합니다.

비교연산자

  • ==: 두 값이 서로 같은지를 확인합니다.
  • !=: 두 값이 서로 다른지를 확인합니다.
  • >: 왼쪽 값이 오른쪽 값보다 큰지를 확인합니다.
  • <: 왼쪽 값이 오른쪽 값보다 작은지를 확인합니다.
  • >=: 왼쪽 값이 오른쪽 값보다 크거나 같은지를 확인합니다.
  • <=: 왼쪽 값이 오른쪽 값보다 작거나 같은지를 확인합니다.

논리연산자

  • &&: 논리 AND 연산을 수행합니다.
  • ||: 논리 OR 연산을 수행합니다.
  • !: 논리 NOT 연산을 수행하여 값을 부정합니다.

대입연산자

  • =: 변수에 값을 할당합니다.

복합연산자

  • +=, -=, *=, /=, %= : 산술 연산과 할당을 동시에 수행합니다.

증감연산자

1. 전위 증감 연산자 (++x, -x):

  • 전위 증감 연산자는 연산을 먼저 수행한 후 변수의 값을 변경합니다.
  • 변수의 값을 증가시키거나 감소시킨 후 변경된 값을 반환합니다.

2. 후위 증감 연산자 (x++, x--):

  • 후위 증감 연산자는 변수의 값을 먼저 반환한 후에 연산을 수행하고 값을 변경합니다.
  • 변수의 값을 반환한 후에 증가시키거나 감소시킵니다.

삼항연산자

  • 조건 ? A : B 조건 이 true이면 A 반환, 그렇지 않으면 B 반환
  • 중첩 가능

제어문(조건문)

if문

  • if, else if, else 구문을 사용하여 조건문을 작성
  • 조건문은 다른 조건문 안에 중첩하여 사용할 수 있습니다.
if (조건1) {
    // 조건1이 참일 때 실행되는 코드
} else if (조건2) {
    // 조건1이 거짓이고, 조건2가 참일 때 실행되는 코드
} else {
    // 모든 조건이 거짓일 때 실행되는 코드
}

switch문

  • switch , **break , default**
  • **표현식과 case**값 의 일치여부를 검사하여, 코드블록 실행
switch (표현식) {
    case 값1:
        // 표현식이 값1과 일치할 때 실행되는 코드
        break;
    case 값2:
        // 표현식이 값2와 일치할 때 실행되는 코드
        break;
    // 추가적인 case 문들...
    default:
        // 위의 모든 case에 해당하지 않을 때 실행되는 코드
}

제어문(반복문)

  • for, while, do-while
  • **break , contiue**

for

for (초기식; 조건식; 증감식) {
    // 반복 실행될 코드
}

//=========================

for (int i = 0; i < 10; ++i) {
    System.out.println(i);  // 0 ~ 9 출력됨
}

while

while (조건식) {
    // 조건식이 참일 때 반복 실행될 코드
}

//=========================

int i = 0;
while (i < 10) {
    System.out.println(i); // 0 ~ 9 출력됨
    i++;
}

do-while

do {
    // 조건식이 참일 때 반복 실행될 코드
} while (조건식);

//=========================

int i = 0;
do {
    System.out.println(i);  // 0 ~ 9 출력됨
    i++;
} while (i < 10);

break

  • 현재 반복문을 탈출합니다.

continue

  • 반복문의 처음으로 돌아갑니다.
  • for 문에서는 증감식으로 돌아갑니다.

배열 (Array) + 다차원배열

  • 타입이 같은 변수들을 하나로 묶어서 관리합니다.
  • 인덱스를 사용하여 요소에 접근할 수 있습니다.
  • 인덱스는 0부터 시작합니다.
  • 선언 후에 크기가 고정됩니다.
  • 배열의 크기는 변경이 불가합니다.

선언 및 초기화

// 배열 변수 선언
자료형[] 변수명;

// 배열객체 생성
new 자료형[배열크기];

// 배열 변수에 배열객체 할당
변수명 = new 자료형[배열크기];

// 선언 및 초기화 예시
int[] numArr; // 정수 배열 선언
numArr = new int[5]; // 크기가 5인 정수 배열 초기화

요소 접근

numArr[0] = 10; // 첫 번째 요소에 10 할당
int x = numArr[0]; // 첫 번째 요소의 값(10)을 x에 할당

다양한 초기화 방법

  • 이 외에도 몇 가지 더 있긴 하지만, 볼 필요 없습니다.
int[] numArr = {1, 2, 3, 4, 5}; // 크기가 5인 배열을 선언하고 초기값을 할당

배열의 길이

int x = numArr.length; // numberArr 배열의 길이(크기)를 구함

객체배열

Person[] personArr = new Person[5];

다차원 배열

  • 배열도 객체다.
  • 객체배열과 같다.
int[][] x = new int[3][3]; // 3x3 크기의 정수형 2차원 배열
x[0][0] = 1; // x의 0번인덱스에 접근 -> 배열객체 가리키는 주소값 -> 배열의0번 요소에 접근

 


클래스와 객체

  • 객체 지향 프로그래밍(OOP)의 핵심

클래스(Class)

  • 객체를 생성하기 위한 설계도
  • 객체를 생성하기 위한 틀
  • 객체를 생성하기 위한 템플릿
  • 멤버(변수,메소드) 를 정의합니다.
  • 데이터(변수) + 기능(메소드) 로 구성되어있습니다.
  • 클래스 작성만으로 메모리에 객체가 할당되지 않습니다.

객체(Object)

  • 클래스의 인스턴스화(instantiation) 과정을 통해 생성됩니다.
  • 객체는 클래스의 인스턴스(instance) 입니다.
  • 클래스에 정의된 멤버를 실제로 가지고 있는 실체입니다.
  • 객체는 메모리에 할당되어, 실제 데이터를 저장하고 해당 데이터를 처리하는데 사용됩니다.

메소드 (method)

  • 특정 작업을 수행하기 위한 코드 블록입니다.
  • 클래스 내에 정의됩니다.
  • 코드의 재사용성과 가독성을 높입니다.

명명규칙 (이름 짓기)

  • 카멜케이스(Camel Case)
  • 동사로 작성
  • 의미있게 작성
  • 반환값에 맞게 작성

문법

접근제한자 반환유형 메소드이름(매개변수) {
    // 메소드가 수행할 작업
    return 반환값; // 반환값이 있는 경우
}
  • 접근제한자(Access Modifier) 공개범위를 지정합니다. public, private, protected, default
  • 반환유형(Return Type) 메소드가 실행된 후에 반환되는 값의 타입을 지정합니다.
  • 메소드이름(Method Name) 제곧내
  • 매개변수(Parameter) 메소드 호출시 전달되는 값들(인자값들)을 받아줄 변수입니다. 인자값이 없으면 안써도 됩니다. 인자값이 여러개라면 매개변수를 여러개 작성합니다.
  • 메소드 바디 (Method Body) 메소드 호출 시 실행될 코드블럭입니다.
  • 반환값(Return Value) 메소드가 실행된 후에 반환되는 값입니다. 쓰레드가 return 을 만나면, 해당메소드를 종료하고 이전 메소드로 돌아갑니다.

종류

  1. 객체(인스턴스) 메소드(Instance Method) 객체를 생성해야만 호출할 수 있습니다.
  2. 정적 메소드(Static Method) 객체생성과 관계없이 실행됩니다. 클래스 이름을 통해 호출합니다.

 


생성자(Constructor)

  • 객체를 생성하여 리턴해주는 메소드 (다만 메소드와 생김새가 조금 다름)
  • 생성자 이름은 클래스명과 동일해야한다.
  • 리턴타입을 가지지 않는다. (자동으로 객체를 리턴함)
  • 클래스파일에 생성자를 아무것도 작성하지 않으면 기본 생성자가 자동으로 만들어진다.
  • 생성자를 작성하면 기본생성자는 자동으로 만들어지지않는다.
  • 오버로딩을 이용하여 여러개 작성이 가능하다.

예시

public class Person {

		//필드 == 멤버변수 == 객체변수 == 인스턴스변수
    private String name;
    private int age;

    // 기본 생성자
    public Person() {
    
    }

    // 모든 필드에 대한 매개변수가 있는 생성자 (AllArgsConstructor)
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

}//class

 

 


String API

 

  • int length(): 문자열의 길이(문자 수)를 반환합니다.
  • char charAt(int index): 지정된 인덱스의 문자를 반환합니다.
  • String substring(int beginIndex): 시작 인덱스 ~ 문자열의 끝 을 반환합니다.
  • String substring(int beginIndex, int endIndex): 지정된 범위의 문자열 을 반환합니다.
  • boolean equals(Object obj): 두 문자열 내용이 동일한지 비교합니다.
  • boolean equalsIgnoreCase(String anotherString): 위와같음 + 대소문자는 구분하지않습니다.
  • int indexOf(String str): 지정된 문자열이 처음으로 등장하는 인덱스를 반환합니다.
  • int lastIndexOf(String str): 지정된 문자열이 마지막으로 등장하는 인덱스를 반환합니다.
  • String toLowerCase(): 문자열을 모두 소문자로 변환합니다.
  • String toUpperCase(): 문자열을 모두 대문자로 변환합니다.
  • String trim(): 문자열의 앞뒤 공백을 제거합니다.
  • String[] split(String regex): 지정된 문자열에 따라 문자열을 분할하여 배열로 반환합니다.
  • String concat(String str): 문자열을 합칩니다.
  • String join(CharSequence delimiter, CharSequence... elements): 이런것도 있구나
  • boolean startsWith(String prefix): 지정된 문자열로 시작하는지
  • boolean endsWith(String suffix): 지정된 문자열로 끝나는지
  • boolean contains(CharSequence s): 지정된 문자열 포함하는지

 

상속과 다형성

상속을 통해 부모 클래스 멤버를 자식 클래스에서 사용할 수 있습니다.

  • 부모 클래스 == 슈퍼클래스 자식 클래스 == 서브클래스

장점

  • 재사용성
  • 확장성

특징

  • 단일 상속

오버라이딩 (@Override)

  • 부모의 메소드를 자식이 재정의 하는 것

다형성 (Polymorphism)

  • 하나의 객체를 다양한 자료형으로 인정합니다.

추상화 , 추상클래스 , 추상메소드

  • 추상화 : 공통된 특성을 추출
  • 추상클래스 : 클래스의 공통 특성을 추출하여 만든 클래스
  • 추상메소드 : 메소드의 공통 특성을 추출하여 만든 메소드

추상클래스(Abstract Class)

  • 객체 생성이 불가능한 클래스
  • 자식 클래스에서 상속받기 위함 (확장하여 사용하기위함)
  • 일반 클래스와 동일하게 작성할 수 있음 (단지 객체 생성이 불가능할 뿐)
  • 추상메소드가 존재할 수 있음 (추상메소드가 있으면 객체 생성 불가능 == 추상메소드가 있으면 무조건 추상클래스)

추상메소드(Abstract Method)

  • 헤드 O
  • 바디 X
  • 부모클래스 증 추상메소드가 있다면 반드시 재정의(오버라이딩)되어야 함

 

 

인터페이스

 
  • 다중 상속 지원
  • 일반변수 X 일반메소드 X 추상메소드 O (그래서 다중상속이 가능하다.)
  • 메소드 작성 시 public abstract 키워드는 생략해도 된다.
  • 클래스는 implements 로 인터페이스를 상속받는다.
  • 인터페이스간 상속은 extends 로 이루어진다.
  • 상수 선언 가능
  • 디폴트 메소드 작성 가능
 

사용 이유

  • 다중상속을 통한 다형성 적용
  • 결합도 낮추기
  • 재사용성
 


예제

interface Mother {
    void sayHello();
}
interface Father {
    void sayHello();
}
class Child implements Mother, Father {
    @Override
    public void sayHello() {
        System.out.println("Hello ~ I'm Child !");
    }
}
public class Main {
    public static void main(String[] args) {
        Child c = new Child();
        c.sayHello(); // Child 클래스의 sayHello() 메소드 호출
    }
}

예외(Exception)

  • 예외 : 정상적인 프로그램 흐름을 방해하는 이벤트
  • try, catch, finally, throw, throws

예외(Exception)의 종류

  1. Checked Exception (컴파일 예외)
    • 컴파일러에 의해 확인되는 예외입니다.
    • 반드시 예외처리를 해야 합니다.
    • Exception 클래스의 하위 클래스입니다.
  2. Unchecked Exception (런타임 예외)
    • 컴파일러가 확인하지 않는 예외입니다.
    • 런타임에서만 확인되는 예외입니다.
    • 예외처리가 필수가 아닙니다.
    • RuntimeException 클래스의 하위 클래스입니다.

예외처리 문법

try {
    // 예외가 발생할 수 있는 코드
} catch (예외종류1 e1) {
    // 예외종류1 예외 처리
} catch (예외종류2 e2) {
    // 예외종류2 예외 처리
} finally {
    // 항상 실행되는 코드
}

강제로 예외를 발생시키기

javaCopy code
public class Hello {
    public static void main(String[] args) {
        throw new RuntimeException(); // 예외 발생
    }
}

 


컬렉션 (Collection)

컬렉션은 데이터를 구조화하여 저장하기 위해 사용합니다.

  • 각 컬렉션은 서로 다른 자료구조 를 갖습니다.

컬렉션(Collection)의 특징

  • 유연성 다양한 유형의 데이터를 저장하고 관리할 수 있습니다. 크기가 가변적이므로 데이터의 추가, 삭제, 변경이 자유롭습니다.
  • 편리성 데이터를 조작하는 다양한 메소드를 제공합니다. 메소드를 통해 데이터를 쉽게 다룰 수 있습니다.
  • 효율성 효율적인 알고리즘을 사용하여 데이터를 처리하므로, 성능을 보장합니다.
  • 다양성 각각의 컬렉션은 특정한 용도에 맞게 설계되어 있습니다.
  • 생산성 표준화된 인터페이스와 클래스를 제공하여 컬렉션을 쉽게 사용하고 관리할 수 있도록 합니다. 이를 통해 개발 생산성을 향상시킬 수 있습니다.

컬렉션(Collection)의 종류

List (리스트)

  • 순서가 있다.
  • 데이터의 중복 허용
  • 인덱스로 각 요소에 접근할 수 있다.
  • 대표적인 구현체로는 ArrayList, LinkedList, Vector 등이 있다.

Set (집합)

  • 순서가 없다.
  • 중복을 허용하지 않는다.
  • 대표적인 구현체로는 HashSet, TreeSet 등이 있다.

Map (맵)

  • entry 로 구성된다.
  • entry 는 key:value 한쌍을 의미한다.
  • key는 유일해야 한다. ( ==중복허용 X )
  • value 는 중복되어도 상관없다.
  • key를 사용하여 value 를 다룰 수 있다.
  • 대표적인 구현체로는 HashMap, TreeMap, LinkedHashMap 등이 있다.

Stack (스택)

  • LIFO(Last-In-First-Out) 순서를 따른다.
  • 대표적인 구현체로는 Stack 이 있다.

Queue (큐)

  • FIFO(First-In-First-Out) 순서를 따른다.
  • 대표적인 구현체로는 LinkedList, PriorityQueue 등이 있다.

Deque (덱)

  • 양쪽 끝에서 데이터를 추가하거나 제거할 수 있다. (Queue 확장판)
  • 대표적인 구현체로는 ArrayDeque, LinkedList 등이 있다.
728x90
반응형