Cute Poka Dotted Sky Blue Bow Tie Ribbon
2026-04-22 15:25:22

OOP: method를 통해 상호작용하는 object들로 이루어진 프로그램. 같은 종류의 object는 같은 type을 갖거나 같은 class안에 있다고 본다.

java 프로그램은 application과 applet으로 나뉨

- application: main이라는 method를 가진 기본 프로그램. application이 run하면 run-time system이 자동적으로 main을 부름, windowing interface 나 console 둘다 사용가능.

- applet: web browser에서 run하도록 설계. 언제나 windowing  interface 사용.

 

system.out: screen에 output보낼때 쓰는 object

+ println: 해당 object가 불러오는 method

 

Java compiler는 프로그램을 byte-code로 번역. (JVM을 위해) -> 일단 byte-code로컴파일 되면 어느 컴퓨터에서든 이용가능, portable함.

interpreter: java 프로그램이 실행될 때 byte-code를 특정 컴퓨터의 기계어로 번역하고 실행. 각 명령어를 하나씩 번역하고 실행함.

 

Class: 각 클래스 정의는 별도의 파일에 있으며 개별적으로 compile(javac class명.java 이렇게 치면 컴파일). 각 클래스 정의는 이를테면 class명.java파일에 정의되어있어야. -> 컴파일 결과는 class명.class byte-code 프로그램파일로 저장.

Class Loader: java 프로그램을 실행하는데 필요한 class들의 byte-code 연결. (==Linker) 

 

모든 class 컴파일 후에는 java class명 으로 실행가능. 

ㄴ main 있는 class만 실행명령 내림. 다른 class는 시스템이 자동으로 로드하고 실행함. 

ㄴㄴ main은 public static void main(String [] args) 로 시작함. -> 프로그램 실행시 args에 전달된 String들 받음

 

Java 식별자: 숫자로 시작x, 모든 문자는 문자와 숫자, _ 기호만 가능. 이론적으로 길이제한x, 대소문자 구분.

ㄴ 보통 클래스명은 대문자로 시작, 변수메소드객체명은 소문자로 시작하고 단어경계는 대문자로

Reserved words(==keywords): public, class, void, static 같은건 다른 용도로 사용x

Predefined identifiers: System, String, println과 같이 미리 정의된거 재정의는 가능한데 하지마라...

상수(==literal): 변경x

ㄴ char는 ' ' 안에, string은 " " 안에. boolean에서 true false는 소문자로.

final ~ 로 하면 해당 변수는 상수가 되어서 값 변경x. 대문자+밑줄로 이름짓기

 

String

- 문자열 + 다른타입 결합하면 toString() 메소드 자동 호출돼서 문자열됨

- +연산자 쓸때 숫자들 있으면 문자열 있는 부분부터 뒤에는 문자열로 처리함 (그앞은 그냥 숫자로)  

ex) 1+2+"3"은 "33"인데 "1"+2+3은 "123"임

 

class: object값의 type명

object: 데이터 저장, 수행. 

method:한 클래스내에 모든 object는 동일한 method 가지지만 다른 데이터값 가능.

 

String method들:

 

System.out.printf 쓰면 c언어처럼 형식문자열+형식지정자로 출력

ㄴ %6.2f: 소숫점 2자리 부동소숫점 표시, 전체 너비가 6자리고 6자리 미만이면 우측정렬 (-붙이면 좌측정렬)

 

package(==라이브러리) : class 모음, import로 불러와야함

ㄴ java.lang 에 있는건 자동으로 import됨

 

import java.util.scanner하고 Scanner s= new Scanner(System.in)으로 받을수있음.

ㄴ 받을때 nextInt(), nextDouble(), next() 공백까지만 읽음, nextLine /n까지 읽고 /n은 제외 해서 읽음

ㄴ s.useDelimiter()를 이용해서 공백이 아니라 다른거로 구분하게 할 수 있음

 

변수: 한번 선언된 변수는 같은이름으로 다시 선언 x

Type Casting: double >float >long >int >short >byte 상위타입으로 변환은 자동으로 되지만 하위로는 (타입)을 붙이는 명시적 캐스팅 필요

정수와 float간 연산->float

do while -> 최소 한번 실행. 실행후에 조건 만족하는지 확인


클래스 변수명 = new 클래스();

지역 변수: 메서드 내부에 선언. * java에는 전역변수가 없다.

 

a.equals(b): object간 비교. (==은 object비교 불가)

toString: object의 데이터 반환

추상화(정보은닉): 클래스 사용방법을 구현 세부사항과 분리

캡슐화: class의 데이터와 method를 class object로 결합하여 구현세부사항 숨기기. object와의 상호작용은 interface를 통해서 됨. ex) private

API: class 사용방법 설명

ADT: public은 어디서나 사용가능, private는 외부에서 접근 불가

Getter: private 변수 얻어오게하는 메소드

Setter: private 변수 변경하는 메소드

 

Method Overloading: 메서드 이름이 같아도 매개변수가 다르면 가능

생성자: 반환타입x, class명과 같은 이름가짐, 새 객체가 생성될때마다 호출, 기본생성자는 매개변수x 초기화도x

ㄴ 클래스에 생성자 하나도 없으면 기본생성자 자동생성, 이미 있다면 기본생성자 직접 정의해야.

instance 변수는 자동으로 초기화(boolean: false, 다른숫자: 0, 클래스: null) / 지역변수는 자동초기화 안됨

 

정적 메소드: public static ~ 해서 정의. 객체 생성안하고 그냥 다 소환가능(전역변수처럼)

ㄴ class의 instance 변수 참고x, 비정적메소드 호출x (this 안가져서) + 다른 static은 호출가능

정적 변수: 클래스당 하나 존재. 선언과 동시에 초기화 가능, 초기화 안하면 기본값으로 자동 초기화. 전역변수처럼 사용됨

ㄴ static final~ 로하면 수정 못하는 defined constant 가능

 

Math 클래스: java.lang에 있으서 import  필요x, 모든 메서드가 static임

Wrapper 클래스: 각 기본타입을 클래스로 만들음 ex) int -> Integer, char -> Character

ㄴ Boxing: 기본타입을 래퍼클래스로 변환, Integer  이름 = new Integer(1); 이런식

ㄴㄴ 오토박싱: Integer 이름=1; 이렇게만 써도 자동타입 변환

ㄴunboxing: int i= 래퍼클래스.intValue();

ㄴㄴ 오토 언박싱: int i= 래퍼클래스;

== 쓰면 메모리 주소비교하니까 값비교는 equals() 써야.

 

메모리 위치: 첫 바이트의 주소가 해당 데이터의 주소로 사용

기본적으로는 할당된 메모리위치에 직접 저장되는데 , Class type일때는 객체가 저장된 메모리주소만 저장. (실제 객체는 다른위치에 저장)

ㄴ = 은 주소를 복사하는거임 ... 두 변수가 동일한 객체 가리키게 할 수 있음

 

기본타입 매개변수: call-by-value라 값 변경 안됨

class타입 매개변수: 주소 보내는거라 변경가능

 

null: 객체x, 어떤 메모리 위치도 가리키지않는 것을 위한 자리표시자. null포함하는지 여부는 ==사용

anonymous 객체: 메소드의 인수로 사용된 후 다시 사용x ex) variable.equals(new A(dd))

 

Class object 참조 그대로 return하면 안됨(privacy leak), return new Class(A) 처럼 복사생성자로 deep copy를 반환해야함

ㄴ 복사 생성자: class와 동일한 type의 인수 받는 생성자.

Immutable class: 생성자 외에 set method없음 ex)String class

Mutable class: set 생성자있음. 

 

Deep copy: 전부다 똑같이 복사

Shallow Copy: 주소만 복사

 

Packages: import해서 사용가능.

ㄴ class를 패키지에 포함시키려면 각 class 파일 맨앞에 package 패키지이름; 을 추가, import보다 앞에있어야함!!

ㄴ  default package: classpath에 현재 디렉토리가 있으면 그 안에 있는거 자동으로 사용가능

ㄴ 다른패키지에서 동일한 클래스명 쓰면 이름충돌 -> fully qualified name으로 해결. ex) 패키지명.클래스명

 

배열 object

타입명[] 배열명 = new 타입명[크기]; 

초기화는 for루프 쓰거나 {1,2,3} 이런식으로 함

char배열은 string 객체가 아님!!!! new String(char배열) 이런식으로 해야 String으로 만들 수 있음

class배열 선언하면 인덱스는 만들어지는데 객체가 생성되는거 아님, 각 인덱스마다 new class() 해서 만들어야함

ㄴ =는 주소만 복사, ==은 같은 주소에 있는지 확인(내용비교x)

ㄴ method는 배열 반환 가능, 타입은 기본타입[] -> 직접 새 배열만들어서 복사해서 deep copy본 반환해야함 

 

Enumrated type:

사용할때 Day a = Day.MONDAY 이런식으로 할 수 있음

equals랑 == 둘다 사용가능

String타입 아님!!

values() 쓰면 enum에 있는 모든값을 순서대로 반환

ㄴvalueOf(enum원소명) 을 쓰면 정확히 해당 원소명을 존재하면 String으로 반환, 없으면 오류 return

 

2차원배열에서 배열명.length 쓰면 행개수 반환

배열이름[행].length쓰면 열개수 반환

 

Inheritance: extends를 해서 superclass의 변수와 메서드 사용가능. (private는 상속받지만 직접접근 불가)

is-a 관계.

Overriding: 자식클래스가 부모클래스를 새로운 정의로 변경

method앞에 final 붙이면 overriding 불가, 클래스 앞에 final붙이면 상속불가

super: 부모클래스의 생성자 호출, 자식생성자에서 항상 맨 위여야함. + 인스턴스 변수는 super의 인수로 사용불가

자식생성자에 super가 없으면 기본생성자 자동호출, 만약 기본생성자가 없으면 오류남

-> super 항상 명시적 호출하는게 좋음

 

this 써서 같은 클래스의 다른 생성자 호출 가능.

ㄴ super이랑 this 둘다 생성자에서 써야하면(둘이 다른 생성자여야함 조심;;) this가 호출하는 생성자는 super를 갖고있어야함

 

자식클래스 method 정의 내에서 부모클래스의 overriding안된 버전 여전히 사용가능 super.메소드이름() 해서 부르면됨

ㄴ자식클래스 object를 클래스 정의 외부에서 사용할때는 overriding안된버전 못불러옴

 

overriding 된 메소드는 private이었던걸 자식에서 public으로 바꿀 수 있음 / 부모가 public이었던걸 자식에서 private으로는 못바꿈

 

Object class:

Java에서 모든 클래스는 Object의 자손, 자동으로 상속함.

java.lang패키지에 있음

Object 타입은 polymorphism을 가져서 어떤 클래스든 여기에 넣을 수 잇음

ㄴ equals는 Object를 매개변수로 써야함 + 매개변수가 null이아닌지, getClass로 같은 클래스타입인지 확인해야

ㄴ getClass() ==이나 != 사용가능 (equal할땐 이거 쓰는게 좋음)

object instanceof a했을때 a가 맞으면 true 아니면 false 

 

'공부 > 학교' 카테고리의 다른 글

인과입 중간  (0) 2026.04.19
데사 중간 정리  (0) 2026.04.16
창소프 기말 정리  (0) 2025.12.15
데베응 기말 정리  (0) 2025.11.28
창소프 중간 정리  (2) 2025.10.27