국비 개발 학원 수료 2일차...
자바의 정석 유튜브 강의로 한번 더 공부하고 기초를 다지려고 한다! 파이팅
코드의 재상용성이 높고 유지보수 용이, 중복 코드 제거
객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)
1. 캡술화 2. 상속 3. 추상화 4. 다형성
클래스 | 객체 |
---|---|
제품 설계도 | 제품 |
TV 설계도 | TV |
클래스의 정의 객체를 정의해 놓은 것
클래스의 용도 객체를 생성하는데 사용
객체의 정의 실제로 존재하는 것. 사물 또는 개념
객체의 용도 객체가 가지고 있는 기능과 속성에 따라 다름
객체: 모든 인스턴스를 대표하는 일반적 용어
인스턴스: 특정 클래스로부터 생성된 객체(예: Tv인스턴스)
클래스 ---(인스턴스화)---> 인스턴스(객체)
class Tv {
String color;
boolean power;
int channel;
void power() {power = !power;}
void channelUp() {channel++;}
void channelDown() {channel--;}
}
같은 클래스라면 참조변수 생략 가능
static 메서드는 객체 생성 없이 호출 가능
클래스명 변수명; // 클래스와 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클래스와 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t = new Tv();
// Tv클래스 타입의 참조변수 t를 선언, Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
변수와 메서드를 사용한다는 것
t.channel = 7; // tv인스턴스의 멤버변수 channel의 값을 7로 저장
t.channelDown(); // tv인스턴스의 메서드 channelDown()을 호출
1. 변수: 하나의 데이터를 저장할 수 있는 공간
2. 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간
3. 구조체: 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간
4. 클래스: 데이터와 함수의 결합(구조체+함수)
- 설계도
- 데이터+함수
- 사용자 정의 타입 (원하는 타입을 직접 만들 수 있다.)
class Variables{ // 1. 클래스 영역 (변수선언, 선언문만 가능, 순서는 상관없음)
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static변수, 공유변수)
void method(){ // 2. 메서드 영역 (메서드 선언)
int lv = 0; // 지역변수
}
}
클래스 영역
1. 클래스 변수 (생성시기: 클래스가 메모리에 올라갈 때 (클래스가 필요할 때))
2. 인스턴스 변수 (생성시기: 인스턴스가 생성되었을 때)
클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부)
1. 지역 변수 (생성시기: 변수 선언문이 수행되었을 때)
🔅 객체 = 인스턴스 변수를 묶어놓은 것
🔅 클래스 변수는 객체 생성 필요 x (아무때나 사용 가능)
🔅 인스턴스 변수는 객체 생성 필요 O (객체 생성을 해야만 사용 가능)
인스턴스 변수 -> 개별
클래스 변수 -> 공통
class Card {
String kind; // 무늬
int number; // 숫자
static int width = 100; // 폭
static int height = 250; // 높이
}
클래스 변수 같은 경우 참조변수로 사용하는 건 권장하지 않는다. 클래스이름.변수이름
으로 사용한다.
Card c = new Card();
c.kind = "HEART";
c.number = 5;
Card.width = 200;
Card.height = 300;
{
문장들}
을 묶은 것(작업단위)메서드 = 선언부 + 구현부
int add(int x, int y) // 선언부
{ // 구현부
int result = x + y;
return result; // 호출한 메서드로 결과를 반환한다.
// return x + y; 위의 두 줄을 이와 같이 한 줄로 간단히 작성할 수 있다.
}
반환할 것이 없을 땐 void int add로 선언한다.
메서드이름(값1, 값2, ...); // 메서드를 호출하는 방법
print99andAll(); // void print99danAll()을 호출
int result = add(3, 5); //int add(int x, int y)를 호출하고, 결과를 result에 저장
실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.
void printGugudan(int dan) {
if!(2 <= dan && dan <= 9))
return; // dan의 값이 2~9가 아닌 경우, 호출한 곳으로 그냥 되돌아 간다.
for(int i=1; i<=9; i++) {
System.out.printf("%d * %d = %d%n", dan, i, dan*i);
}
return; // 반환 타입이 void이므로 생략가능. 컴파일러가 자동추가
}
반환타입이 void가 아닌 경우
, 반드시 return문 필요
.
return문 옆에 반환값은 타입이 일치하거나 자동형변환이 가능한 값이여야 한다.
int multiply(int x, int y) {
int result = x * y;
return result; // 반환 타입이 void가 아니므로 생략 불가, 반환값 = result
}
int max(int a, int b) {
if(a > b)
return a; // 조건식이 참일 때 실행된다.
else
return b; // 조건식이 거짓일 때 실행된다.
}
스택(stack): 밑이 막힌 상자. 위에 차곡차곡 쌓인다.
메서드 수행에 필요한 메모리가 제공되는 공간
메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해체
(아래 있는 메서드(main)가 위의 메서드(Println)를 호출한 것
맨 위의 메서드 하나만 실행 중, 나머지는 대기중