필요한 데이터를 모아 추상화된 객체를 만들고 객체들 관의 협력과 상호작용을 통해 특정 기능을 구성하는 프로그래밍 방법론
객체 - 실재하는 모든 것
클래스 - 객체를 정의한 설계도 또는 틀
인스턴스 - 클래스를 통해 생성된 객체
- 클래스
클래스 정의 방법class 클래스명 { //주로 대문자로 시작 .. }
클래스의 요소
publc class ExClass { int x = 10; // 필드 void printX() {..} //메서드 ExClass {..} // 생성자 class ExClass2{..} // 이너 클래스
필드
: 클래스의 속성을 나타내는 변수 (모델명, 컬러, 바퀴의 수) [멤버]메서드
: 클래스의 기능을 나타내는 함수 (시동걸기, 가속, 정지) [멤버]생성자
: 클래스의 객체를 생성하는 역할이너 클래스
: 내부의 클래스 [멤버]
- 객체
속성(필드)과 기능(메서드) 으로 이루어져 있다.
객체 생성 방법
new
키워드로 생성 , 생성 후에.
연산자로 해당 객체의 멤버에 접근 가능클래스명 참조변수명; // 인스턴스를 참조하기 위한 참조변수 선언 참조변수명 = new 생성자();// 인스턴스 생성 후, 객체의 주소를 참조변수에 저장 // 생성자() - 클래스와 같은 이름이지만 소괄호가 붙음
줄여서 선언 가능
class Car { public static void main(String[] args) { Car kia = new Car(); // Car 클래스를 기반으로 생성된 kia 인스턴스 Car audi = new Car(); // Car 클래스를 기반으로 생성된 audi 인스턴스 }
- 참조 변수 - 실제 데이터가 위치해있는 힙 메모리의 주소
- 객체 생성 - 해당 객체를
힙 메모리
에 넣고 그 주소값을 참조변수에 저장- 같은 클래스로 만든 모든 객체는 동일한 메서드 값 공유
(한번만 저장해두고 필요한 경우 클래스 영역에 정의된 메서드 사용)
- 객체의 활용
객체에 접근하고 사용할 때는.
포인트 연산자참조 변수명.필드명 // 필드값 불러오기 참조 변수명.메서드명() // 메서드 호출
자바에서 변수
필드 변수
직접적을 초기화를 해주지 않아도 강제로 초기화
- 클래스 변수 (cv)
static
과 함께 선언
공통된 저장공간 공유
한 클래스로부터 생성되는 모든 인스턴스들이 특정 값을 공유해야하는 경우
클래스명.클래스변수명
으로 사용 가능- 인스턴스 변수 (iv)
인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수
new 생성자()
로 인스턴스가 생성될 때 만들어진다.
- 지역 변수 (lv) : 메서드 내에 포함된 모든 변수
메서드 내에서 {} 블록 안에서만 사용 가능
class Example { //클래스 영역
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스 변수(static 변수, 공유변수)
void method() { //메서드 영역
int localVariable = 0; // 지역 변수 {}블록 안에서만 유효
}
}
정적 멤버
- static 키워드가 붙은 멤버클래스명.멤버명
으로 사용 가능public class StaticTest {
public static void main(String[] args) {
Static Example staticExample = new StaticExample();
System.out.println("인스턴스 변수: " + staticExample.num1); // static키워드가 없는 인스턴스 변수
System.out.println("클래스 변수: " + staticExample.num2);// static 키워드가 있는 클래스 변수
}
}
class StaticExample {
int num1 = 10;
static int num2 = -10;
}
// 출력
인스턴스 변수: 10
클래스 변수: -10
자바제어자 반환타입 메서드명(매개변수) { //메서드 시그니처
메서드 내용 // 메서드 바디
}
예시
public static int add(int x, int y) {
int result = x+y;
return result;
}
메서드의 반환타입이
void
가 아닌 경우에는 바디 안에 반드시return
문이 존재void printHi() { //반환타입이 void인 메서드 System.out.println("Hi!"); } //반환값이 없는 메서드
int getNumFive() { //매개변수가 없는 메서드 return 5; }
.
를 통해 메서드 호출 가능메서드명(매개변수1,..) //메서드 호출
int add(2,4); // 6 출력
- 메서드 오버로딩
하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것메서드 오버로딩이 되는 조건
- 같은 이름의 메서드명
- 매개변수의 개수나 타입이 다르게 정의
오늘은 자바의 객체지향에 대해 학습했다. 개념들이 어려워서 이해하기가 좀 어려웠지만 한 번 학습하고 라이브세션에서 또 들으니 조금 이해가 되어가는것 같다. 주말에 강의도 좀 찾아보고 반복문 조건문 심화학습도 해야겠다. 일주일이 너무 금방 지나간 느낌이다ㅠ