이전 게시글 네트워크 2
https://hoozy.tistory.com/entry/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-2
[백엔드] 네트워크 2
이전 게시글 네트워크 1 https://hoozy.tistory.com/entry/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1 카테고리 : 네트워크 쿠키와 세션 쿠키 : HTTP의 일종으로 사용자의 컴퓨터에 저장하는 작은 기
hoozy.tistory.com
수많은 언어가 있지만, 저는 자바를 하기 때문에 자바에 대해서 공부한 후
나중에 나머지 언어들도 공부하겠습니다.
카테고리 : 자바(기초)
JAVA
- 썬에서 개발한 객체지향 언어이다. (객체지향은 아래에서 자세히 다루겠습니다.)
- 현재 IT 기술 전반에서 가장 널리 사용하는 프로그래밍 언어이다.
- 장점
- 간결하면서도 강력한 객체지향 언어이다.
- 개방형 구조로 여러 기술과 융합 가능.
- 플랫폼에 독립적으로, 여러 운영체제나 하드웨어에서도 동일하게 실행한다.
- 많은 오픈소스 프레임워크로 생산성을 증가하고 유지보수 비용을 절감할 수 있다.
- 단점
- 처리 속도가 중요한 애플리케이션에는 적합하지 않다.
- GUI 요소가 많은 MS 윈도우 응용 프로그램 개발에는 적합하지 않다.
3, 하드웨어에 연결하여 제어할 수 없기 때문에(JVM 이용) 직접 하드웨어를 정밀하게 조정해야 하는 프로그램 개발에는 적합하지 않다.
JVM (자바 가상 머신)
- 자바 프로그램 실행환경을 만들어 주는 소프트웨어.
- 자바 코드를 컴파일하여 .class 바이트 코드로 만들어 이 코드가 자바 가상 머신 환경에서 실행된다.
- JVM은 JRE(자바 실행 환경)에 포함되어 있고, 운영체제에 맞는 JRE(JVM)가 설치되어 있다면 바이트 코드는 어느 OS에서든 실행이 가능하다.
자바 프로그램의 실행 과정

JDK / JRE
- JDK (자바 개발 키트) : 자바 프로그램 개발에 필요한 구성 요소.
- JRE (자바 개발 환경) : 자바 프로그램 실행에 필요한 구성 요소.
아래부터는 기본 문법을 배워보겠습니다.
자료형
- 기본 자료형
자료형 | 데이터 | 크기 | 표현 가능 범위 |
---|---|---|---|
boolean | 참과 거짓 | 1바이트 | true, false |
char | 문자 | 2바이트 | 유니코드 문자 |
byte | 정수 | 1바이트 | -128 ~ 127 |
short | 정수 | 2바이트 | -32,768 ~ 32,767 |
int | 정수 | 4바이트 | -2,147,483,648 ~ 2,147,483,647 |
long | 정수 | 8바이트 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float | 실수 | 4바이트 | +-(1.40 * 10^(-45) ~ 3.40 * 10^38) |
double | 실수 | 8바이트 | +-(4.94 * 10^(-324) ~ 1.79 * 10^308) |
- 변수 선언
- 기본 자료형 이름 + 변수 명;
int a;
- 변수 초기화
a = 1;
- 변수 이름 규칙
- 길이는 제한이 없다.
- 문자, '_', '$' 로만 시작해야한다.
- 자바의 연산자(+,-,*,/)는 변수 이름에 넣을 수 없다.
- 대소문자를 구분한다.
- 이름 사이에 빈칸을 넣을 수 없다. 빈칸 대신 '_'를 사용한다.
- 자바의 키워드는 변수 이름으로 선언 불가하다.(this 등)
- 기본 자료형 이름 + 변수 명;
- 연산자
- 피 연산자의 개수에 따라 단항, 이항, 삼항 연산자라고 부른다.
- 피 연산자 : 연산자에 연산을 당하는 대상.
- 산술 연산자
- / : 이항 연산자. 두 수를 나눈 몫을 구한다.
- % : 이항 연산자. 두 수를 나눈 나머지를 구한다.
- += : 좌변과 우변을 더한 값을 좌변에 대입한다.
- -= : 좌변에서 우변을 뺀 값을 좌변에 대입한다.
- %= 좌변에서 우변을 나눈 나머지를 좌변에 대입한다.
- ++ : 단항 연산자. 변수 값을 1 증가.
- -- : 단항 연산자. 변수 값을 1 감소.
- 관계 연산자
- == : 이항 연산자. 왼쪽과 오른쪽 항이 같으면 참, 아니면 거짓.
- != : 이항 연산자. 왼쪽과 오른쪽 항이 다르면 참, 아니면 거짓.
- 논리 연산자
- && : 이항 연산자. 두 항의 논리 값이 참이면 참, 아니면 거짓.
- || : 단항 연산자. 두 항의 논리 값 중 하나 이상의 항이 참이면 참, 아니면 거짓.
- ! : 단항 연산자. 연산되는 항이 참이면 거짓, 거짓이면 참.
- [조건식] ? [true] : [false] -> 조건식의 결과가 참일 때 [true] 항이 수행되고, 거짓이면 [false] 항을 수행한다.
- 피 연산자의 개수에 따라 단항, 이항, 삼항 연산자라고 부른다.
- 참조 자료형 : 위에 기본 자료형 빼고 모든 자료형. ( EX) 클래스, 배열, 열거, 인터페이스. 문자열 등)
- 배열
- 배열은 크기를 지정하면 고정된 크기를 갖는다. 이 점 때문에 배열 보다는 ArrayList라는 컬렉션을 많이 쓴다.
- 배열 변수명 선언
int arr[];
- 배열 생성 (크기 지정도 이 때 해준다.) -> 선언과 생성을 동시에 할 수 있다.
arr = new int[5];
->int arr[] = new int[5];
- 초기화 (배열에 값 넣어주는 것)
arr[0] = 1;
- 배열
조건문 (if , switch )
- if 문
if(조건문) {
// 위 조건문이 참이면 실행되는 문
} else if (조건문) {
// 위 조건문이 참이면 실행되는 문
} else {
// 위에 조건문 들이 다 거짓일 경우 실행되는 문
}
- switch 문
- 만약 기준 변수가 조건 2에 만족하면 조건 2부터 아래로 다 실행된다.
- break : break 문 까지만 switch 문이 실행됨.
switch(기준 변수) { case 조건1 : //기준 변수가 조건1을 만족하면 실행되는 문. case 조건2 : //기준 변수가 조건2을 만족하면 실행되는 문. case 조건3 : //기준 변수가 조건3을 만족하면 실행되는 문. break; default : //기준 변수가 조건 1,2,3을 다 만족 안하면 실행되는 문. }
반복문 (for, for each, while, do-while)
- 반복문은 break로 반복문을 바로 종료할 수 있다. continue로 현재 진행 상황 상관 없이 다음 조건을 실행한다.
- for 문
for (int i = 0; i < 10; i++) {
// i가 0부터 10보다 작은 9까지 ++(1씩 증가) 반복한다.
}
- for each 문
int[] num = {"1", "2", "3"};
for (int n : num) {
// num의 원소들을 왼쪽부터 순서대로 반복한다. -> 배열, 리스트 등에서 사용
}
- while 문
while (조건문) {
// 조건문이 거짓일 때까지 반복한다.
}
- do - while 문
do {
// 바로 실행되는 문 -> 아래 조건문이 거짓일 때까지 do 문이 실행됨.
} while (조건문);
클래스
- 객체의 속성을 한 곳에 정의해 놓은 것.
- 객체의 속성은 필드, 메소드, 생성자 등이 있다.
인스턴스(객체)
- 클래스로부터 만들어진 객체.
- 아래에서 Phone 은 클래스, galaxy를 인스턴스라고 한다.
class Phone {
String model;
String color;
int price;
}
public class Main {
public static void main(String\[\] args) {
Phone galaxy = new Phone();
galaxy.model = "갤럭시S10";
galaxy.color = "검정색";
galaxy.price = 100;
}
}
메소드
- 어떠한 작업을 수행하는 코드를 하나로 묶어 놓은 것. 함수 라고도 한다.
public int add(int x, int y) { // 접근 제한자 + 반환 타입 + 메소드 이름 (타입 변수명, 타입 변수명) {
int result = x + y; // 내부 로직 }
return result;
}
생성자
- 인스턴스가 생성될 때 사용되는 인스턴스 초기화 메소드.
- 해당 클래스의 인스턴스가 생성될 때 (new 키워드로 생성) 자동으로 호출되는 메소드.
- 대표적으로 인스턴스의 변수를 초기화하는 용도의 생성자가 있다.
- 생성자의 이름은 클래스 명과 같아야 하며, 리턴 값이 없고, 오버 로딩이 가능하다.
- 클래스를 선언할 때 따로 선언하지 않아도 매개변수와 내용이 없는 디폴트 생성자가 생성되지만, 디폴트 생성자를 제외한 생성자가 하나라도 있으면 디폴트 생성자는 따로 생성하지 않으면 생성이 안된다.
class Phone {
String model;
String color;
int price;
public Phone() { // 디폴트 생성자
}
}
접근 제한자
- public : 접근 제한이 없음.
- private : 같은 클래스 내에서만 접근이 가능.
- protected : 같은 패키지(폴더) 내 클래스, 상속 관계인 클래스만 접근 가능.
- default : 같은 패키지 내 클래스만 접근 가능.
패키지
- 클래스의 묶음.
- 클래스 혹은 인터페이스를 포함시킬 수 있으며, 관련된 클래스끼리 묶음으로써 클래스를 효율적으로 관리할 수 있다.
객체지향 (OOP)
- 객체 : 모든 실재하는 대상
- 객체지향 : 객체들의 특징을 정의하고, 객체들 간의 상호작용으로 프로그램을 개발하는 것.
- 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현할 수 있다.
- 특징 4가지
- 추상화 : 시믈이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
- 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
- 상속 : 기존의 클래스(부모 클래스)를 재활용하여 새로운 클래스(자식 클래스)를 작성하는 자바의 문법 요소.
- 다형성 : 객체의 속성이나 기능이 상황에 따라 여러 형태를 가질 수 있는 성질.
- 캡슐화 : 클래스를 접근 제한자인 private를 활용해 외부에서 접근, 제어를 못하게 캡슐화 하는 것.
- 정보은닉 특징을 가지고 있어, 클래스의 연산(getter, setter)을 통해서만 접근이 가능하다.
- 추상화 : 시믈이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
객체지향의 설계원칙
- SOLID
원칙명 | 설명 | |
---|---|---|
SRP | 단일 책임 원칙 | 한 클래스는 하나의 책임만 가져야 한다. |
OCP | 개방-폐쇄 원칙 | 확장에는 열려 있고, 수정에는 닫혀 있어야 한다. |
LSP | 리스코프 치환 원칙 | 상위 타입은 항상 하위 타입으로 대체할 수 있어야 한다. |
ISP | 인터페이스 분리 원칙 | 인터페이스 내에 메소드는 최소한 일수록 좋다. (하나의 일반적인 인터페이스 보다 여러 개의 구체적인 인터페이스가 낫다.) SRP와 같은 문제에 대한 두 가지 다른 해결책이다. |
DIP | 의존관계 역전 원칙 | 구체적인 클래스보다 상위 클래스, 추상클래스와 같이 변하지 않을 가능성이 높은 클래스와 관계를 맺어라. DIP 원칙을 따르는 가장 인기 있는 방법은 의존성 주입(DI)이다. |
상속
- 클래스 명 뒤에 extends 부모 클래스 명 {} 으로 작성한다.
- 부모 클래스에서 정의된 필드와 클래스를 물려 받는다.
- 부모 클래스에서 물려 받은 메소드를 수정할 수 있다.
- super, super() 메소드
- super : 부모를 가르키는 참조 변수.
- 부모 클래스 내의 변수를 참조.
- super() : 부모의 생성자를 호출하는 메소드.
- 일반 클래스 호출처럼 만약 부모의 디폴트 생성자가 없고, 오버로딩된 부모의 생성자가 있으면 디폴트 생성자를 접근 못하기 때문에 super()은 못쓰고, 오버로딩된 부모의 생성자의 매개변수 조건과 같게 super(매개변수) 메소드를 사용해야 한다.
- super : 부모를 가르키는 참조 변수.
- this, this() 메소드
- this : 현재 속한 클래스를 지칭.
- this() : 현재 속한 클래스의 다른 생성자를 호출할 때 사용.
오버로딩 / 오버라이딩
- 오버로딩 : 한 클래스 내에 동일한 이름의 메소드를 여러개 정의하는 것.
- 메소드의 이름이 동일해야 하고, 매개변수의 개수와 타입이 다 달라야한다.
- 오버라이딩 : 부모 클래스로부터 상속 받은 메소드의 내용을 변경하는 것.
- 단, 부모 클래스의 메소드의 이름, 매개변수, 반환타입이 같아야한다.
추상 클래스 / 인터페이스
- 추상 클래스 : 추상 메소드를 선언할 수 있는 클래스. 상속받는 클래스 없이 그 자체로 인스턴스 생성 불가. 하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스.
- 추상 메소드 : 구현부 없이 선언된 미완성 메소드. 자식 클래스가 무조건 오버라이딩하여 구현부를 작성해야 한다.
abstract class Bird { // 추상 클래스 abstract boolean flyable(int a); // 추상 메소드 }
- 인터페이스 : 객체의 특정 행동의 특징을 정의하는 간단한 문법. 멤버를 가지지 못하고, 메소드만 정의할 수 있다. 메소드는 내용을 가질 수 없다. 인터페이스를 구현하는(상속받는) 클래스는 인터페이스에 존재하는 함수의 내용을 반드시 구현해야한다.
interface Flyable { // 인터페이스
void fly(int a, int b, int c); // 추상메소드
}
// 인터페이스는 implements를 사용하여 상속 받는다.
class Pigeon implements Flyable {
private int a, b, c;
@Override
public void fly(int a, int b, int c) { // 무조건 사용해야 함.
this.a = a;
this.b = b;
this.c = c;
}
}
추상 클래스 / 인터페이스 차이점
추상클래스 | 인터페이스 | |
---|---|---|
내부메소드 | 추상메소드 필수 아님 | 추상메소드만 가능 |
다중 상속 여부 | 불가능 | 가능 |
구현 방법 | extends | implements |
특성 | 기능을 재사용, 확장한다는 측면에서 상속성을 지님 | 같은 이름의 메소드가 클래스에 따라 다르게 동작하도록 구현되는 특성인 다형성을 지님 |
예외 처리
- 목적
- 예외의 발생으로 인한 실행 중인 프로그램의 비정상 종료를 막기 위해서
- 개발자에게 알려서 코드를 보완할 수 있도록 하기 위해서
- try-catch(-finally) 형식
- 자원을 닫을 때 close()를 사용해야 함.
try { // 예외가 발생할 수 있는 코드 } catch (Exception e) { e.printStackTrace(); // 에러의 이름이 출력되는 코드 // 예외가 발생했을 시 실행되는 코드 (catch는 여러개 작성 가능) } finally { // 예외의 발생여부 상관없이 항상 실행되는 코드 }
- try-with-resource 형식
- try문을 벗어나는순간 자동적으로 close() 호출.
// ()괄호 안에 입출력 스트림을 생성하는 로직을 작성할 때 해당 객체가 AutoClosable 인터페이스를 구현한 객체여야 합니다. try (FileOutputStream out = new FileOutputStream("test.txt")) { out.write("Hello".getBytes()); out.flush(); { catch (IOException e) {}
- 메소드에서의 예외 선언
- catch문을 이용해서 예외 처리를 하지 않은 경우, 메소드에 throws로 예외를 발생할 수 있다는 것을 알려줘야 한다.
void method() throws IOException {}
JAVA 기초 끝.
다음 게시글 JAVA 심화 1
https://hoozy.tistory.com/entry/JAVA-%EC%8B%AC%ED%99%94-1
[JAVA] 심화 1
이전 게시글 JAVA 기초 https://hoozy.tistory.com/entry/JAVA-%EA%B8%B0%EC%B4%88 카테고리 : 자바(심화) 컬렉션 1. List 인터페이스 정렬된 모든 객체 컬렉션을 저장할 수 있는 목록 데이터 전용. ArrayList 동작 배열
hoozy.tistory.com
참고 자료
'CS > 자바' 카테고리의 다른 글
[JAVA] 프레임워크 (0) | 2023.03.10 |
---|---|
[JAVA] 심화 2 (0) | 2023.03.10 |
[JAVA] 심화 1 (0) | 2023.03.08 |
댓글