SeSAC 웹풀스택 17주차 | JAVA

hatban·2023년 3월 7일
0
post-thumbnail

자바코드 실행과정

  • 자바소스코드(.java) => 컴파일러 => 자바 바이트 코드(.class) => 자바가상머신(JVM)에서 실행
  • 자바는 운영체제 독립적이라 JVM만 있으면 어느 운영체제든 실행가능

식별자

  • @, #, !와 같은 특수문자 사용 불가(_랑 $는 사용가능)
  • 공백 불가
  • 한글 가능하나 사용하지 않기
  • 예약어 식별자 불가
  • 숫자사용가능(그러나 첫글자 x)


Data Type

  • 자바는 강한 타입언어로, 데이터 타입을 선언해줘야 한다

1. 기본타입 : 값을 바로 넣기

  • boolean ⇒ 논리
  • char ⇒ 문자
  • byte, short, short, int, long ⇒ 정수타입
  • float, double ⇒ 실수타입

2. 레퍼런스타입(참조형) : 값이 들어있는 메모리 주소가 들어감

  • 배열에 대한 레퍼런스
  • 클래스에 대한 레퍼런스 (ex. String)
  • 인터페이스에 대한 레퍼런스


입력과 출력

1. 출력

  • System.out.print : 줄바꿈 X
  • System.out.println : 줄바꿈 O

2. 입력

  • Scanner 사용

Scanner 클래스 주요 메소드

  • next() : 공백 이전까지의 문자열 읽음
  • nextLine() : 엔터(\n) 이전까지의 문자열을 읽음
  • nextInt(), nextDouble(), nextBoolean(), nextFloat() ... etc : 공백 이전까지의 특정 자료형을 읽음
  • close() : scanner 닫음


연산자

  • + , -, *, /, %


반복문

  • for문 : 시작문의 변수타입 지정
for(int i = 0; i<9; i++) {
	System.out.println(i);
}
  • while문
int i = 0;
while(i<10) {
	System.out.print(i + " ");
	i++;
}

while vs do-while

int i = 10;
while(i<10) {
	System.out.print(i + " ");
	i++;
}
		
System.out.print("\n");
		
int j = 10;
do {
	System.out.print(j + " "); 
	j++;
}while(j < 10);


// do while은 한번은 무조건 출력됨!!


메소드

  • 클래스 안에 있는 함수
  • 반환값이 없는 경우 void, 있으면 반환값의 변수타입을 지정해줘야 한다.


Array

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
int i = 10;
while(i<10) {
	System.out.print(i + " ");
	i++;
}

System.out.print("\n");
		
int j = 10;
do {
	System.out.print(j + " "); 
	j++;
}while(j < 10);


// do while은 한번은 무조건 출력됨!!
  • for-each
for(int value : arr1) {
	System.out.print(value + " ");
}

배열 출력

  • Array 클래스의 toString 메소드 활용

2차원 Array


ArrayList

  • 표준 Array보다 조금 느릴 수 있지만 배열에서 많은 조작이 필요할 때 유용
  • 크기를 미리 정하지 않아도 된다
  • 제너릭으로 선언
ArrayList<Integer> arr1 = new ArrayList<>();

ArrayList 메서드

  1. 값 추가
  • add(a) : element1을 맨 뒤에 추가
  • add(a, b) : 인덱스가 a인곳에 b를 추가한다
  • addAll(배열) : 배열 전체를 뒤에 추가한다
  1. 값 가져오기
  • get(a) : 인덱스가 a인 곳의 값을 가져온다
  • size() : arrayList는 length를 사용하지 않고 size를 사용한다
  • indexOf(a) : a값의 첫번째 인덱스를 가져온다
  • lastIndexOf(a) : a값의 마지막 인덱스를 가져온다
  1. 값 제거하기
  • remove(a) : 인덱스가 a인 값을 제거, a가 값이 아니라 인덱스다!
  • clear : arrayList 모두 비우기


예외처리

🔥컴파일 오류 vs 예외

  • 컴파일 오류 : 문법에 맞지않아 발생, 컴파일 할 때 발견되서 코드가 실행조차안됨

  • 예외 : 프로그램 실행중에 의도치 않은 결과가 나온는것 ⇒ 이것을 처리하는게 예외처리

예외가 발생하는 경우

  • 숫자를 0으로 나누는 경우
  • 배열의 인덱스 범위를 벗어나는 경우
  • 정수를 입력받도록 작성한 코드에 문자열을 입력한 경우
    • import 필요
    • import java.util.InputMismatchException;
  • ...etc

try-catch-finally

  • 예외 처리를 위한 방법
  • try : 예외 발생 가능성이 있는 실행문
  • catch : 예외 처리문
  • finally : 예외 유무와 상관없이 실행


자바의 패키지

  • 관련있는 클래스 파일을 저장하는 공간


객체지향 프로그래밍

  • 필요한 데이터와 코드를 묶어 하나의 객체로 만들고, 이 객체들 간에 상호작용을 하도록 프로그램을 만드는 방식

장점

  • 코드 재사용에 용이
  • 유지보수 용이

단점

  • 처리속도가 느림
  • 설계 복잡

클래스

  • 객체의 틀

구조

  • 필드 : 클래스 내에서 값을 저장하는 변수
  • 생성자 : 객체가 생성될 때 자동으로 실행되는 메소드
  • 메소드 : 클래스 내에서 선언된 함수

메소드 형태

  • 접근 제어자
  • 리턴타입
  • 함수 이름

생성자

  • 이름이 클래스 이름과 같아야 한다
  • 리턴 타입을 적지 않는다

접근 제어자

  • 목적 : 클래스나 일부 멤버(필드, 메소드)를 외부에서의 접근 제한을 걸어두는 것

접근 제어자 종류

  • public : 모든 클래스 허용
  • protected : 다른 패키지 x, 동일 패키지 가능, 자식 클래스는 모두 허용
  • default : 동일 패키지에서만
  • private : 같은 클래스에서만

클래스의 사용

  • new 클래스명
  • 객체 => 클래스의 인스턴스

getter & setter

  • 클래스에서 필드(변수)는 private으로 지정하는게 일반적
  • 따라서 간접적으로 필드에 접근할 수 있도록 public 메소드를 제공
  • 이것을 getter와 setter라고 한다
  • getter : 필드값을 가져올 때
  • setter : 필드값을 설정할 때

static

  • 객체마다 생성되는 것이 아니고 클래스당 하나만 생성
  • 클래스가 생성되는 순간 메모리를 할당받음
  • 즉 객체를 생성하지 않아도 static 멤버에 접근 가능
  • 동일한 클래스의 모든 인스턴스에 공유(같은 메모리 공간 공유)
  • non-static의 경우 객체가 생성될 때마다 멤버 공간을 새로 만든다 -> 메모리 공간이 공유되지 않음

static 변수의 사용

  • 보통 static 변수는 공유의 목적으로 많이 사용됨
  • static 메소드는 유틸리티성 메소드를 작성할 때 많이 사용됨
    • ex ) 오늘의 날짜 구하기, 숫자에 콤마 추가하기 등

static의 제약

  • static 메소드에서 non-static 멤버에 접근할 수 없음
    • 객체가 생성되지 않은 상태에서 nonstatic멤버는 만들어져있지 않아서
  • non-static 메소드에서 static 멤버는 접근 가능
  • static 메소드에서는 this 불가


클래스의 상속

  • 부모 클래스에서 정의된 필드와 메소드를 자식 클래스가 물려받는 것
  • extends 키워드 사용
  • super는 첫줄에 쓰기

장점

  • 멤버의 중복 작성 제거
  • 클래스의 계층적 분류 가능
  • 클래스의 재사용과 확장성 용이

메소드 오버로딩

  • 같은 이름으로 메소드를 여러개 생성
  • 대신 매개변수가 달라야한다

메소드 오버라이딩

  • 부모 클래스에 정의한 메소드를 자식 클래스에서 다시 정의
  • 매개변수, 이름 등등 모두 같아야한다(내용만 다르게)


후기

그동안 배웠던 자바스크립트에 비해 자료형을 명확히 해줘야하는 언어를 배우게 돼서 좋은 경험이라고 생각한다. 그리고 클래스의 개념을 잡는게 아직도 조금 헷갈리지만 클래스를 사용하면서 리액트에서 컴포넌트로 나누는 것처럼 동작(메소드를) 나누게 되면서 코드가 간단해지는건가 라는 생각을 했다.

0개의 댓글