자바의 역사
C언어(절차지향) -> C++(객체지향 과도기) -> Java(객체지향)
자바의 특징
- OOP(Object Oriented Programming)(객체지향 프로그래밍)
- 객체를 생성하고, 조작하여 객체끼리 상호작용을 할 수 있도록 하는 프로그래밍 언어
Object 객체
- 사람의 정의한 모든 것 (추상적인 것X)
- 항상 정의할 수 있어야 하며, 이를 설계단계에서 추상화한다.
OOP 언어의 특징
- 추상화
추상적인 것을 구체화하는 행위 - 캡슐화
데이터를 보호하고 은닉하는 것
절차지향과 다른 점으로 데이터를 캡슐화하여 관리하여
데이터 관리가 명확하고 데이터를 보호/은닉할 수 있음 - 상속
부모 클래스로부터 자식 클래스가 부모 클래스의 속성을 물려받는 것
물려받아서 내 것처럼 사용 가능
효율적인 상속 구조를 위해 관계를 잘 고려해야 함 - 다형성
하나의 객체나 메소드가 다른 여러가지 형태를 가질 수 있음- 오버라이드, 오버로딩이 대표적
JVM(Java Virtual Machine)
자바를 실행하기 위한 가상 기계
일반 애플리케이션은 OS(Windows)를 거쳐 컴퓨터(하드웨어)에 접근
Java 어플리케이션은 JVM을 거친 후, OS, 컴퓨터에 접근하게 된다.
Object vs Instance
Object ==> instance
⇒ class
메모리에 올라가지 않은 상태가 object
메모리에 올라간 상태를 instance
접근지정자
1번이 가장 좁고 4번이 가장 넓음
- private : 나만 접근할 수 있음. 외부에선 절대 접근 불가능
- default : 같은 패키지 내에서만 접근가능
- protected : 외부 패키지 중 상속받은 객체만 접근가능
- public : 아무나 접근가능
** 한 페이지에서는 public 한개만 만들 수 있음
function vs method
- C언어랑 차이 두려고 그런데, 둘 다 똑같다고 생각하면 됨
- 자바는 외부함수를 만들지 못함 -> 패키지, 임포트 만 밖에 만들 수 있음
-> 나머지는 무조건 클래스 안에서 만들어야 함
** 패키지, 임포트 > 순서 중요
일반적인 함수 모양
- main 함수 : 프로그램의 시작과 끝을 담당
리턴타입 함수명 () {
}
public static void main(String [] args) {
}
*public : 접근제어자
*static : 공유 > 공유하면 한개 (메인 함수는 오직 하나)
Static
- 공유한다.
- 메모리상에서 컴파일시 미리 생성된다.
- 객체와 무관하게 메모리에 먼저 올라감 ( 소속이 없어서 )
- 오직 한개이다.
- 메모리 절약 가능
** "회사이름"처럼 공통되는 부분을 하나만 만들고 공유해서 사용
** 싱글톤 패턴에 적합
실행
public class Hello {
public static void main(String [] args) {
System.out.println("Hello....");
}
}
> 실행해도 Hello 클래스가 생성되는 것은 아님
> 자동생성 static 때문에 실행 됨
상수
변하지 않는 값
ex) 문자 > 아스키 코드로 변경해줘야함 A 65, a 97 > 상수 X
변수
상수를 저장하는 메모리 공간
** 항상 유지보수하는 거 생각하면서 코드 작성하기
불린 형태로 리턴하면서 어디서 오류뜨는지 잘 확인할 수 있음
Java DataType
기본 타입
- 불린 : true/false
- return 타입에 가장 많이 사용
- 문자 : char 2 byte
- 자바는 2바이트 > 유니코드 (이제는 다 2 바이트)
- c언어는 1바이트
- 정수 : byte short int long
- 4 → int
- 4L → Long
- 실수 : float(4) double(8)
- 3.4 → double로 인식 ( 큰개념으로 인식함)
- 3.4f → float
레퍼런스 타입 (참조)
객체가 생성되는 방식
stack | heap (Queue)
이름 규칙
- 클래스 이름은 첫글자 대문자로 작성
- 예외적으로 static 클래스는 객체 생성이 미리 되기 때문에
클래스명.xx
이런식으로 사용Static :클래스이름.~
하고 사용가능, - 원래 방식도 가능하지만, static을 구분하기 위해서
클래스 이름.~
으로 사용하기 - **System > Static 미리 만들어짐
- 객체, 변수, 메소드명을 쓸 때
blackwhite
→blackWhite
로 구분해주기 - 최대 34글자까지 가능
연산자
증감 연산자
++, - -
ex) a++ ⇒ a = a + 1; 후증가
한문장에 같은 이름이 반복되었을 때, 심각한 오류가 발생할 수 있음 > 한 문장에 같은 이름 반복되지 않도록 하기~!
ex) ++a ⇒ a = a + 1; 선증가
연산자 반복적으로 사용했을 때
a = 1
b = a++ b=2, a =3
b = ++a a=3, b = 3
대입 연산자
+=, -=
a = a + 4 ⇒
a += 4
비교 연산자
a !=
b
a == b
a =! b
논리 연산자
&&(and), ||(or)
비트연산자
&
a & b a=3, b=4 0011 & 0100 ⇒ 0000 ⇒ 0
a | b = > 0111 ⇒ 7
a >> 1 ⇒ 0001 ⇒ 1 (나누기2)
a << 1 ⇒ 0110 ⇒ 6 (곱하기2)
제어문
IF 문
Switch 문
반복문
For
while
do ~ while
import fava.lang.*;
switch(a) { // a = value
case 1: System.out.println("1");
case 2: System.out.println("2");
case 3: System.out.println("3");
default: System.out.println("4"); //1 넣으면 1234, break 붙여도 되고 안붙여도 댐
}
switch(a) { // a = value
case 1: System.out.println("1"); break;
case 2: System.out.println("2"); break;
case 3: System.out.println("3"); break;
default: System.out.println("4"); //1 넣으면 1
}
>> break 로 제어하면서 사용할 수 있음
char c; 2byte
String op; (글자수+2 byte) // 레퍼런스 타입
c = sc.next().charAt(0);
>> next는 문자열로 받음 >> 0번째꺼 가져오기
op = sc.next();
if(c=='+')
if(op == "+")
상속
has - a (포함)
is - a (상속)
final >> has a만 쓰겠다 [ 상속은 못한다 / 금지 ]
고쳐쓰지 않겠다
For While
public class forWhile {
public static void main(String [] args) {
for (초기문; 조건문; 증감문) {
}
초기문;
while(조건문) {
증감문;
}
}
}
** 무한루프 조심하기
while문 장점
** flow chart 만들면 while문이 더 쉬움
** 초기문 증감문 위치에 따라 미묘한 차이 발생
do While문
do {
}while(조건문);
'Java' 카테고리의 다른 글
자바의 정석 [Ch.08] 5 (1) | 2024.01.24 |
---|---|
자바의 정석 [Ch.07] 4 (0) | 2024.01.24 |
자바의 정석 [Ch.07] 3 (1) | 2024.01.24 |
자바의 정석 [Ch.06] 2 (0) | 2024.01.24 |