객체

객체의 정의 (알맹이) : new연산자에 의해 heap 메모리에 생성되어 있는 것
ex) 배열 객체

클래스 : 데이터에 은닉화가 되어 있고 기능까지 되어있는 것 (캡슐화가 되어있는 클래스)

객체 : 클래스에 정의된 내용으로 메모리에 할당된 결과물

추상화 : 어디서든 적용될 수 있게 유연하게 만들어야함

클래스 > 객체가 될때 (인스턴스화, 객체=인스턴스)

★객체 지향 3대 특징★

1) 캡슐화: 데이터와 메서드를 하나로 묶어 외부에서 직접 접근하지 못하도록 하는 개념, 정보 은닉과 관련이 있으며, 객체의 내부 상태를 보호하는 데 도움을 줌

1-1) 멤버변수의 접근권한은 private 원칙
1-2) 멤버함수는 클래스 밖에서 접근할 수 있도록 public

2) 상속: 이미 존재하는 클래스에서 새로운 클래스를 생성하는 개념, 이로써 코드의 재사용성이 향상되고 계층 구조를 형성할 수 있음

3) 다형성: 다형성은 같은 이름의 메서드나 연산자가 다른 클래스에서 다르게 작동할 수 있음을 의미, 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현됨

클래스

ex) public(접근제한자) class Student(클래스명) {}

클래스에 적용 가능한 접근 제한자

default : 같은 패키지 안에서만 사용 및 접근 ( 생략 되어 있으면 default임, 직접 쓰면 안되며 다른 패키지에서 import 도 불가

package

패키지의 선언

: 소스파일 첫 번째 문장에 단 한번 선언
ex) package kh.academy;

특징

1) 하나의 소스파일에 둘 이상 클래스가 포함된 경우 모두 같은 패키지에 속함
2) 패키지가 선언되지 않은 클래스ㅡㄴ 자동적으로 default 패키지에 속함

필드: 클래스 안에 있되 메소드 밖에 있는 변수
=멤버 변수 =멤버 필드 =전역 변수

import

import : 사용할 클래스가 속한 패키지를 지정하는데 사용
※String, Object, System과 같은 java.lang 패키지 내 클래스는 import 안하고 사용 가능

import문의 선언

필드

(=전역변수 / 멤버변수 / 멤버필드)

필드 표현식

ex)
private int temp1;
public int temp2;
int temp3;

필드 접근제한자

후손 = field나 메소드를 물려주는,
protected : 상속 관계에 있을 경우에만 접근가능 , 그 이외는 같은 패키지 내만 접근 가능

필드 예약어

(1) static

field 예약어 static : 공유의 의미 (static{} 안에있는 데이터들은 static 메모리에 저장됨), 메모리 낭비하지 않기 위해 객체 사용

ex) privat static int temp1;

(2) final

하나의 값만 계속 저장해야하며 고정된 상태로 공유하고 싶을 때 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개는 개수가 달라서 오버로딩이 적용되었음
	}

//필드명은 파란색, 지역변수는 노란색으로 표시됨
//필드명과 지역변수 이름이 같을 때는 지역변수가 우선순위

레퍼런스 변수 = 참조 변수 (주소값을 가지고 있는 변수)

this

내 클래스에 다른 생성자 호출시 사용

생성자 실습 예제)

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/setter 메소드

getter : 값을 반환해주는 메소드 (반환타입 있어야함 , 매개 변수 사용x)

setter : 값을 변경해주는 메소드 (반환타입 - void , 매개변수 존재)

return

profile
나의 코딩 다이어리🖥️👾✨

0개의 댓글