티스토리 뷰
인프런 - 자바(JAVA) 언어 기본 강좌를 듣고 정리한 내용
OT
메모리 해제 > garbage collector : 메모리 자동 해제
C++: malloc(), free
JAVA: new, del
JVM(Java Virtual Machine)
자바의 실행과정: *.java > *.class > JVM
자바 프로그램의 시작과 표준 출력
public static void main(String[] args)
표준 출력 : java.lang package
System.out : public static final PrintStream out
print, printf, println
java keywords
상수 : 사용하고 있는 모든 수, 불변의 값. 숫자 상수와 문자 상수로 구성
- 자바는 아스키코드가 아닌 유니코드로 문자를 저장함 (근데 1~128까지는 값이 같아서... 숫자는 알던 그 수 그대로)
데이터와 연산자
data type
기본형 : boolean, char, byte, short, int, long, float
참조형(reference type) : 메모리 주소를 저장하는 데이터형. 클래스, 배열, 인터페이스
변수 : 상수를 저장하는 메모리 공간
연산자 : 증감, 산술, 비교, 시프트, 비트, 논리, 조건, 대입
반복문과 선택문
- 반복문while(조건식) {} : 조건식에 1이나 0 쓰는거 안됨! 무조건 true, false로 작성
- do {} while(조건식)
- for(초기화; 조건식; 증감) {}
- 선택문switch(표현식) {case 값1: break; case 값2: break; default: break;}
- if(조건식) {} else if(조건식) {} else {}
continue : 하단의 동작을 실행하지 않고 반복문의 처음으로..
break : 가장 가까운 반복분을 빠져나가게 하는 기능 + label 기능(중첩된 반복문 빠져나올 수 있음) ⇒ c의 goto 기능과 유사
배열
배열 : 같은 변수명, 같은 데이터명, 다수의 변수
int[] nArray; / int nArray[]; ⇒ 참조형 배열 변수
nArray = new int[10]; ⇒ 객체
2차원 배열 생성 시, 행에 대한 열이 각각 다른 배열 생성 가능
int[] nArray = new int[10];
int[][] nArray = new int[2][2];
int[][] nArray;
nArray = new int[3][];
nArray[0] = new int[2];
nArray[1] = new int[3];
nArray[2] = new int[5];
배열의 초기화 시 기본값 : char-null, int-0, boolean-false, float-0.0
int[] nArray1 = {1, 2, 3, 4};
int[][] nArray2 = { {1, 2}, {3, 4} };
int[][] nArray3 = { {1, 2}, {3, 4, 5, 6} };
클래스
class class_name { // field, constuctor, method declarations }
멤버 변수 : 클래스 안에서만 사용 가능한 공용 변수, 클래스 내에서 전역 변수와 유사한 속성을 가짐. 객체속성 == 멤버변수
객체의 생성과 사용 : use new keyword .을 통해 멤버변수와 메소드에 접근
- 접근 제어자
- private : 같은 클래스 안에서만 접근 가능
public : 전체에서 접근 가능
protected : 같은 클래스와 패키지, 하위 클래스에서 접근 가능
생략된 제어자 : 같은 패키지와 패키지 안에서만 접근 가능
오버로딩(overloading) : 중복되는 메소드명을 클래스 안에서 정의할 수 있도록 하는 것. 같은 함수명으로 다양한 값을 받아 처리
생성자(constructure) : 객체가 생성될 때 자동으로 한번 호출되는 메소드. 리턴형이 없고 클래스명과 함수명이 같다. public. 오버로딩 가능
this : 객체 자신을 참조하는 참조형 클래스 변수/키워드
this() : 생성자에서 또 다른 생성자를 호출. 생성자의 첫 줄에서 호출
static : 멤버변수나 메소드를 전역으로 선언
static 멤버변수와 메소드의 공통점 : 객체가 생성되기 이전에 멤버변수와 메소드 사용 가능
static 멤버변수의 특징 : 멤버변수는 생성되는 모든 객체에서 전역변수로 사용 가능
- static 메소드의 사용 규칙
- static 메소드 안에서 멤버변수를 사용할 때, 멤버변수는 항상 static으로 선언된 것만을 사용할 수 있다.
static 메소드는 같은 클래스 안의 static 메소드만을 호출할 수 있다.
static 메소드 안에서는 this를 사용할 수 없다.
static 메소드는 오버라이딩을 할 수 없다.
package : 자주 사용되는 클래스를 모아둔 폴더 package package_name; package package_name.class_name;
import : 클래스를 포함하고자 할 경우 사용 import package_name.*; import package_name.class_name;
상속(inheritance)
상속 : 객체와 코드를 연관시키고 계층구조를 만들어 코드를 재사용. 오직 한 클래스만을 상속할 수 있다. 상위 클래스의 코드나 변수를 그대로 사용 가능.
부모 클래스, 상위 클래스 , parent class, super class - 자식 클래스, 하위 클래스, child class, sub classclass class_name extends super_class_name {}
- 상위 클래스의 접근지정자에 따라 접근이 제한됨
- private* 멤버는 해당 클래스에서만 사용할 수 있고, 하위 클래스에서는 사용 불가
public 멤버는 해당 클래스 및 하위 클래스, 외부에서 모두 사용 가능
protected 멤버는 같은 패키지일 때는 public처럼 사용되지만, 다른 패키지의 경우 하위 클래스에서만 사용 가능하며 외부에서는 사용 불가
default 멤버는 같은 패키지일 때는 public처럼 사용되지만, 다른 패키지의 경우 하위 클래스 및 외부 모두에서 사용 불가

오버라이딩(overriding) : 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것. 함수명과 함수의 매개변수, 리턴형이 모두 같아야 함.
- final
- 클래스와 메소드에 사용될 때 : 상속과 오버라이딩 불가
변수에 사용될 때 : 변수의 값 수정 불가
상속관계에서 생성자의 호출 순서 : 상위 클래스 생성자 > 하위 클래스 생성자 > 생성자에 매개변수가 있는 경우 자동호출이 안되므로 super 키워드 사용
super : 하위 클래스에서 상위 클래스를 참조하여 생성자나 메소드, 변수에 접근할 때 사용 super() super(매개변수) super.멤버변수명 super.메소드명
상위 클래스의 생성자를 호출할 때는 하위클래스의 생성자 맨 첫줄에 있어야 함
참조변수를 이용한 형 변환과 호출 : 캐스트 연산자 ( ) 사용
하위 클래스에서 상위 클래스로 형 변환 가능하며 접근지정자에 따라 접근이 결정됨
생성된 하위 클래스에서 상위 클래스 형 변환을 통해 하위 클래스의 멤버에 접근할 수 없음
상위 클래스의 메소드가 하위 클래스에 오버라이딩된 경우, 상위 클래스 참조변수에서 오버라이딩된 메소드를 호출하면 하위 클래스의 메소드가 실행
추상 클래스(abstract class)
하위에서 구현할 메소드(추상 메소드)의 원형을 가진 상위 클래스로 상위 클래스로만 존재하며 자체를 객체로 생성할 수 없음(상속 관계로만 생성 가능)
abstract class class_name { abstract return_type method_name(); }
추상 메소드를 하위에서 모두 구현할 필요는 없음
인터페이스(interface)
abstract class vs interface
공통점) 상위 클래스로만 사용 가능. 하위에서 구현할 함수의 원형을 선언
차이점) 추상 클래스 = 일반 멤버 + 추상 메소드 // 인터페이스 = 추상 메소드 + 상수
추상 클래스는 일부 구현 가능 // 인터페이스는 강제적으로 모두 구현해야 함
추상 클래스는 단일 상속만 가능 // 인터페이스는 다중 상속 가능하며 인터페이스가 인터페이스를 다중 상속할 수도 있음
interface interface_name { 변수나 메소드 선언 }
인터페이스의 변수는 public static final이며, 메소드는 public abstract이다.
인터페이스 상속 형식 : class class_name implements interface_name
class class_name extends abstract_class implements interface_name
예외 처리
프로그램 실행 도중 발생되는 오류를 처리하기 위한 부분.
try-catch-fianllytry { 예외가 발생할 수 있는 문장 } catch(Exception_type e) { 예외 발생 시 처리하는 문장 } finally { 항상 실행할 문장 } exception type : java.lang
throws : 모든 예외처리를 try-catch 안의 괄호에 넣어 처리하기에는 무리가 있으므로 JVM 또는 예외 처리 클래스를 지정하는 것return_type method_name() throws Exception { } ⇒ JVM에서 처리
throws를 이용하면 main에서 바로 exception 처리도 가능
내부 클래스와 익명 클래스
내부 클래스 : 클래스 안에 클래스를 정의한 것.class class_name { class innerclass_name { } }
new로 생성. 내부 클래스는 외부 클래스의 자원 사용 가능. 외부 클래스를 통해 내부 클래스 사용. 선언에 따라 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스로 나눌 수 있음
outer_class.new inner_class(); outer_class.inner_class.method();
익명 클래스 : 클래스명이 없는 클래스. 일회성으로 선언과 생성이 동시에 이루어짐class_name class_variable = new class_name() { }interface_name interface_variable = new interface_name() { }
- 익명클래스 사용 형식
- 인터페이스를 상속한 클래스 사용
인터페이스를 상속한 익명 클래스 이용
익명 클래스를 메소드의 매개변수로 사용
유용한 클래스들
wrapper : 기본 데이터형을 객체로 다룰 수 있도록 해줌. 기본 데이터형 + 메소드 ex) Character, Integer, Float 등...
Integer : java.lang.Object - java.lang.Number - java.lang.Integer
intValue(), toString((int)), parseInt(string), valueOf(string)
autoboxing of wrapper class ; wrapper 객체의 값 사이의 변환을 자동으로 처리해줌. 기존 wrapper 클래스의 메소드를 간략하게 사용할 수 있게 함
Integer intVar = 12; // new Integer(12)
int nVar = 3;
// sum of variable and object => use autoboxing
int nTotal = nVar + intVar; // autoboxing for Integer
// int nTotal = nVar + intVar.intValue()
intVar++; // use autoboxing
String vs StringBuffer
공통점) 문자열을 다루는 객체
차이점) String-고정 문자열 // StringBuffer-유동문자열
String : 고정문자열 java.lang.Object - java.lang.String
charAt(int), concat(string), isEmpty(), length(), toLowerCase(), toUpperCase(), toString(), equals(object), valueOf(char[]/float/int/object) 등...
문자열 설정 방법 : 1. 생성자 new String("") 2. 대입 연산자를 통한 직접 지정 3. 문자열 연결(concat()이나 + 연산자 사용)
StringBuffer : 유동문자열. 충분한 버퍼 크기 설정 필요 java.lang.Object - java.lang.StringBuffer
constructor : StringBuffer((String/int/CharSequence))
append(String/StringBuffer), length(), insert(int, String), delete(start, end) 등...
Arrays : 배열을 다루는 클래스로 정렬, 검색, 특정 값으로 설정, 비교, 문자열 반환 등을 수행 import java.util.* java.lang.Object - java.util.Arrays
주요 메소드가 모두 static임. binarySearch(int[], int), equals(int[], int[]), sort(int[]), sort(int[], start, end), toString(int[]), fill(int[], start, end, value) 등...
컬렉션 클래스
컬렉션 클래스 : 단일 구조 안에서 다수의 데이터를 그룹화하는 객체
Collection Framework : 다수의 데이터를 다루기 위한 통합 구조 ⇒ Collection Interface
Generics : 컬렉션 클래스에 저장할 타입을 지정하고 데이터를 읽을 때 지정된 타입으로 데이터를 입력 받게 하는 형식
컬렉션 클래스로부터 데이터를 읽을 때 형변환없이 읽을 수 있다는 장점(코드의 안정화)이 있지만 데이터 타입이 다른 경우 에러가 발생한다collection_calss <type> class_variable = new Collection_class();
Vector class : 기존 배열의 단점을 보완하기 위한 클래스로 유동적인 데이터 저장이 가능하다. 기본형은 wrapper 클래스로 변환하여 저장. 배열+메소드
ArrayList class : Vector 클래스에서 업데이트된 클래스. 기본형은 그대로 사용 가능하지만 generics 사용
LinkedList class : 데이터의 추가, 삭제 삽입이 자주 발생하는 데이터를 다루기 위한 자료구조 클래스
GUI, AWT와 스윙(swing)
GUI(Graphical User Interface) : 그래픽 환경, 모든 운영체제의 기본 환경 버튼, 이미지, 메뉴 등 제공
AWT(Abstrace Windowing Toolkit) : 자바 초기 GUI 프로그래밍 도구로 운영체제의 리소스 사용
스윙(Swing) : 순수 자바 컴포넌트 패키지로 자체 리소스를 사용하며 J~ 클래스로 제공됨
컨테이너(Container) : 컴포넌트를 포함하는 클래스(Frame, Panel, Dialog, Window, Applet)
컴포넌트(Component) : 버튼, 이미지 리스트 등 개별적인 것으로 컴포넌트는 반드시 컨테이너에 포함됨
- 스윙을 위한 기본 패키지 포함문
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*; - 스윙 프로그램 작성
- 프레임 생성 : JFrame = Frame + 메뉴 + 컨텐트 팬(컨테이너 클래스)
JFrame 객체를 생성하거나 JFrame을 상속하여 프레임 생성 - 컴포넌트 연결 : JFrame에 직접 추가
setLayout(null); // 프레임의 레이아웃 관리자 설정 JButton btn = new JButton("test"); btn.setSize(70, 20); // 컴포넌트의 크기 설정 btn.setLocation(50, 10); // 컴포넌트의 위치 설정 add(button);- 이벤트 처리 → event listener
- 프레임 생성 : JFrame = Frame + 메뉴 + 컨텐트 팬(컨테이너 클래스)
자바 프로그램 종료 → System.exit(0);
스윙 프로그램 종료 → setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
레이아웃 관리자 : 컨테이너에 컴포넌트를 위치 시키는 방법으로 setLayout()을 통해 지정함.
BorderLayout : 컨테이너를 5개의 영역(동,서,남,북,중앙)으로 나누어 컴포넌트르 배치하는 레이아웃 관리자 BorderLayout.CENTER
GridLayout : 컨테이너 공간을 격자 모양으로 나누는 레이아웃 관리자 GridLayout(int rows, int cols)
FlowLayout : 컴포넌트를 왼쪽에서부터 오른쪽으로 순차적으로 배치하는 레이아웃 관리자
CardLayout : 컴포넌트가 겹쳐서 나열되는 레이아웃 관리자
이벤트 처리
이벤트 소스(event source) : 이벤트를 발생시킨 컴포넌트
이벤트 객체(event object) : 이벤트 소스에 대한 모든 정보를 가지는 객체
이벤트 리스너(event listener) : 이벤트에 따라 호출될 메소드로 인터페이스임
import java.awt.event.*; import javax.swing.event.*;
이벤트 객체 : 이벤트를 발생한 컴포넌트의 정보를 가짐. 이벤트 종류, 이벤트 소스, 좌표 등
모든 이벤트 객체는 EventObject를 상속하므로 getSource()를 통해 이벤트를 분리할 수 있음. 이벤트 분리 후 형변환을 통해 원하는 정보를 얻을 수 있음
이벤트 리스너 : 이벤트 처리를 담당하는 인터페이스로, 익명 클래스나 인터페이스를 상속한 내부 클래스로 구현하여 사용할 수 있다.
- 이벤트 리스너를 구현하는 방법인터페이스를 상속한 내부 클래스로 구현
public class class_name implements event_listener { interface implement } - 익명 클래스로 구현 : 일회성 사용
event_source.addevent_listener(new event_listener(){ implement });
이벤트 리스너는 인터페이스이므로 모든 메소드를 구현해야됨 → 이벤트 어댑터
이벤트 어댑터(event adapter) : 리스너 메소드가 미리 구현된 클래스. 전체 메소드의 일부만 구현하면 되므로 메소드가 많은 경우에만 어댑터 클래스를 제공함 (KeyListener, MouseListener, MouseMotionListener, FocusListener, WindowListener 등)
'java' 카테고리의 다른 글
| 내가 보려고 정리하는 이클립스 단축어 (0) | 2021.04.26 |
|---|
- Total
- Today
- Yesterday
- string module
- 스택
- initBinder
- 이진 탐색
- rjust
- djnago
- 양방향 연결 리스트
- sequence type
- 스프링부트
- airbnb clone
- postfix notation
- 파이썬
- springboot
- divmod
- tailwind
- ValidataionUtils
- most_common
- Django
- 의존 주입
- 직접 주입
- Stack
- 선형 탐색
- 출력 형식 지정
- ljust
- 선형 배열
- for-else
- 자료구조
- valid annotation
- python
- python flag
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
