객체의 정의 (알맹이) : new연산자에 의해 heap 메모리에 생성되어 있는 것
ex) 배열 객체
클래스 : 데이터에 은닉화가 되어 있고 기능까지 되어있는 것 (캡슐화가 되어있는 클래스)
객체 : 클래스에 정의된 내용으로 메모리에 할당된 결과물
추상화 : 어디서든 적용될 수 있게 유연하게 만들어야함
클래스 > 객체가 될때 (인스턴스화, 객체=인스턴스)
1) 캡슐화: 데이터와 메서드를 하나로 묶어 외부에서 직접 접근하지 못하도록 하는 개념, 정보 은닉과 관련이 있으며, 객체의 내부 상태를 보호하는 데 도움을 줌
1-1) 멤버변수의 접근권한은 private 원칙
1-2) 멤버함수는 클래스 밖에서 접근할 수 있도록 public
2) 상속: 이미 존재하는 클래스에서 새로운 클래스를 생성하는 개념, 이로써 코드의 재사용성이 향상되고 계층 구조를 형성할 수 있음
3) 다형성: 다형성은 같은 이름의 메서드나 연산자가 다른 클래스에서 다르게 작동할 수 있음을 의미, 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현됨
ex) public(접근제한자) class Student(클래스명) {}
default : 같은 패키지 안에서만 사용 및 접근 ( 생략 되어 있으면 default임, 직접 쓰면 안되며 다른 패키지에서 import 도 불가
: 소스파일 첫 번째 문장에 단 한번 선언
ex) package kh.academy;
1) 하나의 소스파일에 둘 이상 클래스가 포함된 경우 모두 같은 패키지에 속함
2) 패키지가 선언되지 않은 클래스ㅡㄴ 자동적으로 default 패키지에 속함
필드: 클래스 안에 있되 메소드 밖에 있는 변수
=멤버 변수 =멤버 필드 =전역 변수
import : 사용할 클래스가 속한 패키지를 지정하는데 사용
※String, Object, System과 같은 java.lang 패키지 내 클래스는 import 안하고 사용 가능
(=전역변수 / 멤버변수 / 멤버필드)
ex)
private int temp1;
public int temp2;
int temp3;
후손 = field나 메소드를 물려주는,
protected : 상속 관계에 있을 경우에만 접근가능 , 그 이외는 같은 패키지 내만 접근 가능
field 예약어 static : 공유의 의미 (static{} 안에있는 데이터들은 static 메모리에 저장됨), 메모리 낭비하지 않기 위해 객체 사용
ex) privat static int temp1;
하나의 값만 계속 저장해야하며 고정된 상태로 공유하고 싶을 때 static final 사용
ex) private final int TEMP1 = 100;
(변수명 대문자 사용 必)
기호 : # protect / - private / +public / 밑줄 static
정답)
package com.kh.example.practice1.midel.vo;
public class Member {
private String memberIdString;
private String memberPwd;
private String memberName;
private int age;
private char gender;
private String phone;
private String email;
public void changeName(String name) {
memberName = name;
}
public void printName() {
System.out.println(memberName);
}
}
package com.kh.example.practice1.run;
import com.kh.example.practice1.midel.vo.Member;
public class Run {
public static void main(String[] args) {
Member m = new Member();
m.changeName("홍길동");
}
}
생성자(Constructor) : 메모리 객체 생성 후 필드에 기본값만 있을 때, 특정값으로 초기화 시키고 싶을 때 이용 (단, 특정값을 초기화시키고 싶을 때 만 사용하는 건 아님)
1) 반환 타입이 없음
2) 클래스명을 똑같이 지정해주어야함
매개변수가 없는 생성자, 데이터 없으면 jvm이 자동 생성
ex) public Academy () {}
매개변수가 있는 생성자, jvm이 자동으로 생성해주지 않음
ex) public Academy (int studentNo, Strig name) {
this.studentNo = studentNo;
this.name = name;
}
메소드에 적용이 되지만 생성자도 메소드의 일부이기 때문에 적용됨
★ 매개변수의 순서가 다르거나 타입이 다르거나 개수가 다른 경우 오버로딩 적용★
ex) 예시
public class User {
private String userId;
private String userName;
private int age;
private double point;
public User () { //내가 스스로 기본 생성자를 만들어야 뒤에서 실행 가능
}
//생성자 (일반적으로는 field와 메소드 사이)
//void 지우고 class랑 이름 동일하게
public User (String id, String name, int nai, double p) {
userId = id;
userName = name;
age = nai;
point = p;
}
public User(String id, String name, int nai) {
userId = id;
userName = name;
age = nai;
// 위 public user 3개는 개수가 달라서 오버로딩이 적용되었음
}
//필드명은 파란색, 지역변수는 노란색으로 표시됨
//필드명과 지역변수 이름이 같을 때는 지역변수가 우선순위
레퍼런스 변수 = 참조 변수 (주소값을 가지고 있는 변수)
내 클래스에 다른 생성자 호출시 사용
package com.kh.example.practice4.mode.vo;
public class Book {
private String title;
private String publisher;
private String author;
private int price;
private double discountRate;
public Book() {}
public Book(String title, String publisher, String author) {
this.title = title;
this.publisher = publisher;
this.author = author;
}
public Book(String title, String publisher, String author, int price, double discouneRate) {
this(title, publisher, author); // 위에 있기 때문에 this 생성자 이용
this.price = price;
this.discountRate = discountRate;
}
public void inform() {
}
}
package com.kh.example.practice4.run;
import com.kh.example.practice4.mode.vo.Book;
public class Run {
public static void main(String[] args) {
Book b1 = new Book();
Book b2 = new Book("자바의 정석","행복출판사","남궁성");
Book b3 = new Book("초보자를 위한 리액트 200제", "정보문화사","이정열",15000,0.2);
b1.inform();
b2.inform();
b3.inform();
}
}
메소드 : 함수와 비슷하며 호출을 통해 사용
1) 반환타입은 무조건 있어야함
반환할 값이 없을 경우 void 사용
2) 매개변수가 있을 수도 없을 수도 있음
3) 리턴값이 있을 수도 없을 수도 있음
int : length, next ...
boolean : equals ...
char : charAt ...
double : random ...
배열 : copyOf (배열 안에 있는 값이 아닌, 배열 주소 값이 반환 - 얕은 복사)
가변인자 ex) pintf
▲리턴값이 int타입으로 있을 것이다.
return을 쓰고 뭘 반환할것인지 무조건 적어줘야함
getter : 값을 반환해주는 메소드 (반환타입 있어야함 , 매개 변수 사용x)
setter : 값을 변경해주는 메소드 (반환타입 - void , 매개변수 존재)