역사를 이해하고 간다면 먼저 편할꺼 같다.
Java 란 C언어 + 객체 지향을 입힌 단어이다.
즉, OOP(Object Oriented Programming) 객체 지향 프로그래밍 이란 모든 데이터를 현실에 빗대어 객체로 다루는 프로그래밍 기법이다.
특징)
- 캡슐화 (Encapsulation) : 데이터와 함수를 하나로 묶는다.
- 정보은닉 (Information Hiding) : private으로 선언한 데이터는 자기 자신을 통해서만(setter, getter) 접근 가능하다.
- 추상화 (Abstraction) : 불필요한 부분은 생략하고 중요한 것에만 초점을 맞춰 모델로 만든다.
- 상속성 (Inheritance) : 부모클래스에 정의된 모든 것을 자식 클래스가 물려받는다.
-
재정의 할 필요가 없어 코드 작성이 간결해진다.
-
상속으로 인한 최소한의 규칙을 통해 프로젝트의 확장 시 오류를 최소화 한다.
-
자식클래스에서 새로운 함수를 추가하거나 부모 클래스의 함수를 재정의(Overriding)해 사용할 수 있다.
-
클래스의 재사용이 쉽다.
- 다형성 (Polymorphism) : 호출하는 객체에 따라 다른 동작을 한다.
-하나의 클래스에서 같은 이름의 함수를 여러 개 가질 수 있다(Overloading). 호출하는 객체가 어떤 인풋 파라미터를 사용해 호출하냐에 따라 각자 다른 함수가 호출되게 한다. 즉, 비슷한 기능을 하는 다른 함수를 만들 때 불필요하게 너무 많은 함수명을 만들어 내 가독성이 떨어지는 문제를 해결할 수 있다.
여기까지가 OOP의 간단한 설명과 특징을 나열했다.
자바의 장점.
-
운영체제와는 독립적으로 실행할 수 있다
-
불필요한 기능을 과감히 제거하여 다른 언어에 비해 배우기가 쉽다.
-
자동 메모리 관리 등을 지원하여 다른 언어에 비해 안정성이 높다
-
연산자 오버로딩을 금지하고 제네릭을 도입함으로써 코드의 가독성을 높였다.
-
관한 수많은 참고 자료를 찾을 수 있다.(사용자가 많음으로 그만큼 자료또한 풍부함.)
자바의 단점.
-
실행을 위해 자바 가상 머신을 거쳐야 하므로, 다른 언어에 비해 실행 속도가 느리다. (JVM: Java Virtual Machine)
-
예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편함이 있다.
-
다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.
자바 프로그래밍 실행 과정.

자바 설치

OOP(Object-Oriented Progrmming)
객체 지향 프로그래밍 = OOP
객체를 생성하고, 이를 블록처럼 조립해서 하나의 프로그램으로 만드는 것
학교 가는 과정에 대한 절차적 프로그래밍.
1 일어난다 2 씻는다 3 밥을 먹는다 4 버스를 탄다 5 요금을 지불한다
6 학교에 도착한다
<시간에 흐름에 따른 프로그래밍>

학교 가는 과정에 대한 객체 지향 프로그래밍.
1 객체를 정의한다
2 객체의 기능을 구현한다
3 객체 사이의 협력을 구현한다
OOP의 장점
1 실행이 빠르다
2 구조가 깔끔하고 명확하다.
3 코드를 DRY(Don't Repeat Yourself) 상태를 유지 할 수 있도록 해준다.

[ " Class가 없다면 계속 작업이 반복돼 흑흑 " ]
변수란 ?
프로그램에서 사용되는 자료를 저장하기 위한 공간 할당받은 메모리의 주소 대신 부르는 이름.
프로그램 실행 중에 값 변경 가능 사용되기 이전에 선언되어야 한다
변수명 규칙
- 대소문자 구분하며 길이 제한은 없음
- 예약어(Reserved Word)를 사용하면 안됨( ex. for, int, short...) 3. 숫자로 시작하면 안됨
- 특수문자는 ’_’ 와 ‘$’만 허용됨
- 이름 사이에 공백이 있으면 안됨
[ 변수의 역할에 어울리는 의미 있는 이름으로 지을것 ]
상수란 ?
항상 같은 수를 의미한다
- final 키워드 이용해 선언
- 대문자로만 구성된 명사로 정함 - 값이 변하면 위험한 경우에 사용
변수의 자료형

Primitive(원시) 자료형
- int, long, double, float, boolean, char
- 원시 자료형은 실제 데이터를 담는다
- 리터럴(literal)로 값 세팅 가능하다
- 참조 자료형(Reference) : 데이터를 가리키는 주소값을 가진다
리터럴
- 리터럴은 계산식 없이 소스코드에 표기하는 상수 값 ( ex. 10, 3.14, ‘A’, true)
- 리터럴에 해당하는 값은 특정 메모리 공간인 상수 풀에 있다 - 상수 풀에 저장할 때 정수는 int, 실수는 double 로 저장한다.
- 따라서 long, float으로 저장하는 경우 L, f의 식별자 필요하다
자료형

자료형(정수)
byte
- 1바이트
- 저장돼 있는 데이터를 바이너리(Binary) 원본 그대로 다루고 싶을 때 사용 - 동영상, 음악 파일 등 실행 파일의 자료를 처리할 때 주로 사용
short
- 2바이트
- 주로 C/C++ 언어와의 호환 시 사용
int
- 자바에서 사용하는 정수에 대한 기본 자료형
- 4바이트
- 프로그램에서 사용하는 모든 숫자(리터럴)는 기본적으로 int로 저장
- 32비트 초과하는 숫자는 long형으로 처리해야 함
long
- 8바이트
- 가장 큰 정수 자료형
- 숫자 뒤에 L 또는 l을 써서 long형임을 표시해야 함
자료형(실수)

- 문자 자료형 -> Char : 문자도 내부적으로는 비트의 조합으로 표현 (2byte)
문자 자료형
- 문자를 위한 코드값들을 정해 놓은 세트
- 아스키(ASCII) -> 1byte로 영문자, 숫자 ,특수문자 등을 표현
- 유니코드(Unicode) -> 한글과 같은 복잡한 언어를 표현하기 위한 표준 인코딩. (UTF-8,UTF-16)
형 변환
- 자료형은 각각 사용하는 메모리 크기와 방식이 다르다
- 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다
- 자료형은 각각 사용하는 메모리 크기와 방식이 다르다
- 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다
- 명시적형변환: 변환되는자료형을명시해야함 자료의 손실이 발생할 수 있다
!-! 자동 형변환 (묵시적 형 변환 )
- 작은수 -> 큰수, 덜 정밀한 수(정수) -> 더 정밀한 수(실수)

연산자
대입 연산자(Assignment)
- 변수에 값을 대입하는 연산자
- 연산의 결과를 변수에 대입
- 우선 순위가 가장 낮은 연산자

산술 연산자
- 사칙연산에 사용되는 연산자

증감 연산자
- 단항 연산자
- 항의 앞뒤 위치에 따라 연산의 결과가 달라짐

관계 연산자
- 이항 연산자
- 연산의 결과가 true(참), false(거짓)으로 반환됨

논리 연산자
- &&à모두 참일 때 참 (and 연산자)
- ||à하나라도 참이면 참 (or 연산자)
- !àboolean의 값 역전시킴 (not 연산자)

복합 대입 연산자
- 대입 연산자와 산술 연산자 함께 사용

조건 연산자
- 삼항 연산자
- 제어문 중 조건문을 간단히 표현할 때 사용할 수 있음

조건문
switch/case 문
입력변수의 값과 일치하는 case 입력값(입력값1, 입력값2, ...)이 있다면 해당 case문 하위의 문장이 실행
breakà해당 case문을 실행 한 뒤 switch문을 빠져나가기 위함 defaultà만약 break 문이 빠져 있다면 그 다음의 case 문이 실행됨
while 문
- 조건문이 참인 동안 실행

for 문
- 반복문 중 가장 많이 사용

<뀰팁 난 그냥 초조증이라고 암기를 해버렸다>