내일배움캠프 4일차 TIL _ 2주 3일차
2024. 4. 24. 21:01ㆍTIL Java
- 오늘 있었던 일
- 스파르타 자바 수업으로 공부하기
- 설계도 (class )
더보기
객체지향 이해하기
- 객채란
- 세상의 존제하는 물건으로 자동차,자판기등 물건을 객체라 볼 수 있다.
- 삶 , 주문 , 운동 같은 계념도 식별 가능하기에 객체라 한다.
- 자판기를 예시로
- 속성(특징) : 자판기의 회사, 외관, 위치, 크기 등의 속성
- 행위(작동) : 물건 판매, 돈 받기, 조명, 냉장기능 등 행위
- 이를 필드와 매서드로 정의를 소프트웨어의 설계가 객체 모델링
- 자판기를 예시로
- 객체 간의 상호작용
- 객체가 자바의 메서드(매개변수)or(파라미터) 를 호출해 리턴이 작동한다.
- 예시로는 자판기가 버튼(매서드) 를 누르면 물건이 나온다.
- 객체가 자바의 메서드(매개변수)or(파라미터) 를 호출해 리턴이 작동한다.
- 객체간 상호작용 종류
- 사용관계
- 사람이 자판기를 쓴다. [ 사람 ] <=> [자판기]
- 포함관계
- 자판기엔 버튼 과 투입구가 있다. [ 자판기 ( 버튼 ) (투입구) ] [버튼] [투입구]
- 상속관계
- 공장에서 자판기 A,B를 제작한다. [공장 (도면)] => [자판기 A (도면) ] , [자판기 B (도면) ]
- 사용관계
- 객체 지향 프로그래밍 특징
- 캡슐화
- 특징(필드)와 행동(매서드)를 접근 제어자를 이용해 외부의 접근을 막음
- 특정 매서드를 이용해야만 접근이 가능함
- 상속
- 부모 자식 관계가 존제, 객체 자식은 여럿 가능하지만 에 부모는 하나만 가능함
- 부모와 자식 관계는 부모의 유산을 받은 자식 이라 생각하면 편하다
- 파악하기 쉽고 일관성을 유지하기 편하며 코드 제활용에 용의함
- 다양성
- 서로 다른 객체가 조상 타입의 참조변수로 자손클래스에서 인스턴스를 참조해 변형하는것
- 할아버지(AAA) => 형( BB ) , 동생 ( CC )
- 추상화
- 다수의 객체에서 공통된 부분을 모아 상위개념으로 선언하는 것
- 자판기 마다 형태는 다르지만 '버튼을 누르면 나온다'를 모으는 것을 말함
- 객체와 클래스
- 클래스(class)를 인스턴트화를 통해 다수의 인스턴트를 생성 가능함
- 캡슐화
클래스 설계
- 설계의 4단계
public class Vending_machine {
// 1단계 클래스 선언
// 2단계 필드 정의
String company; // 자판기 회사
String color; // 자판기 색상
double oc; // 자판기 내부 온도
char gear; // 자판기 버튼, A,B,C,D,E
boolean ON_OFF; // 자판기 작동 상태
public Vending_machine(){
// 3단계 생성자 정의
/* 클래스 생성시 매개변수를 넣을 것인지 정하는 것
아무것도 없이 이름만 가져오는 것은 기본 생성자
*/
}
//4단계 메서드 정의
/* 정의
객체가 지닌 기능(행동), 필드를 제어함
메서드 선언
void 값이 아닌 이상 리턴해야 함
메서드명( 매개변수 ) 의 매개변수가 다수일시 순서을 지켜야함
호출
선언과 동일함, 메서드명(매개변수)로 인스턴스함
*/
boolean buttton(boolean ON_OFF) {
ON_OFF = !ON_OFF;
return ON_OFF;
}
double buttton_color() {
color = "red";
return color;
}// 이 메서드 선언시 color를 "red"로 바꾼다
char changeGear(char type) {
gear = type;
return gear;
} //gear 값을 type으로 변환한다
void good() {
System.out.println("당첨");
} //void = 반환값없이 매서드 실행시"당첨"이 출력함
}
객체 생성과 참조형 변수
- 객체 생성 및 참조형 변수
- 클래스명 인스턴스명 = new 클래스명();
- 객체 생성 연산자 인'new'를 이용하면 클래스로 부터 객체를 생성함
- 객체는 참조형 변수와 동일하게 취급되기에 배열or컬랙션에 저장가능함
객체 속성 : 필드
- 필드
- 객체의 데이터를 저장하는 역활을 한다. ( 고유, 상태, 객체 )
- 초기화 해도 된다, 하지 않을시 null값이나 false등 초기값을 가진다
- 접근 방법
- 외부
- 클래스명 인스턴스명 = new 클래스명();
- 호출 이후 인스턴스명 . 필드명 으로 [ . ] 점을 찍는것으로 필드에 접근가능
- 내부
- 기존 연산처럼 필드가 있는 클래스에서 변수명을 쓰면 호출된다.
- 외부
매서드 ( 행동 )
- 선언
- 리턴타입(변수) 메서드명 ( 매개변수 ) {실행할 코드}
- 리턴 타입(변수)가 void가 아닌 이상 리턴한다 할게없다면 void.
- 매개변수
- 여러게를 넣을 수 있고 [ , ]으로 구분해 개수를 정하거나 [ ... ]으로 가변길이를 만든다.
- 매개변수
- 호출
- 외부 접근
- 클래스명 인스턴스명= new클래스명(); 으로 객체를 생성후
- 인스턴스명.매서드명(매개변수); 으로 사용한다
- 내부 접근
- 객체를 생성할 필요 없다.
- 매서드명(매개변수); 으로 사용한다
- 변환 값 저장 = 변수 변수명 = 인스턴스명.매서드명(매개변수);
- 외부 접근
- 오버로딩
- 리턴타입(변수) A메서드명 ( int 매개변수 ) {실행할 코드}
- 리턴타입(변수) A메서드명 ( char 매개변수 ) {실행할 코드}
- 리턴타입(변수) A메서드명 ( double 매개변수 ) {실행할 코드}
- 동일 메서드 명의 매개변수의 개수나 변수를 바꾸는 것으로 가능하다. 예시로 println()가 있다
- 기본형 & 참조형 매개변수
- 기본형 매개변수 : 매개 값을 매서드 매개변수에 복사해서 전달한다
- 선언 후 메서드가 있는 클래스의 값이 바뀌어도 매개값은 그대로다.
- 참조형매개변수 : 매개 값의 주소를 복사해서 전달한다.
- 선언 후 메서드가 있는 클래스의 값이 변하면 변한다.
- 기본형 매개변수 : 매개 값을 매서드 매개변수에 복사해서 전달한다
인스턴스 멤버와 클래스 멤버
- 맴버 = 필드 + 매서드
- 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
- 클래스 멤버 = 클래스 필드 + 클래스 메서드
- 인스턴스 멤버 & 클래스 멤버
- 선언 방식에 따라 인스턴스인지 클래스인지 구별 가능함
- 인스턴스는 객체의 생성이 필요하지만 클래스 맴버는 객체 생성이 필요없음
- 인스턴스 멤버
- 클레스 맴버를 사용가능하다.
- 매서드는 매서드 영역에 두고 인스턴스들이 공유해 사용해 효율을 높임
- 클래스 멤버
- static 변수 변수명 = 값;
- static 변수 메서드명 (매개변수) { 실행 코드 } ;
- 클레스 맴버로 선언된 메서드는 인스턴스 맴버를 사용할 수 없다.
- 사용시
- 클래스명.필드변수명 = 값;
- 클래스명.메서드명 (매개변수);
- 참조형 변수를 사용해 클래스 멤버에 접근은 가능하지만 추천하지 않는다.
- 클래스 명으로 접근하는것을 추천한다.
- final필드와 상수
- final 선언
- final 변수 변수명 = 값;
- 사용방법은 일반적인 인스턴스 필드와 동일하지만 수정이 불가능하다
- 상수
- static final 변수 변수명(대문자 (관례)) = 값;
- 인스턴스가 공유할 수 있는 값이 한 개이며 불변인 상수를 선언할 수 있다.
- final 선언
- 생성자
- 객체의 초기화 역활을함
- 생성자의 오버로딩시 변수와 개수, 타입에 유의 해야함
- this와 this()
- this
- this.필드변수명 = 값;
- 매개변수명과 객체의 필드명이 동일할 경우 생성자 블록 내부에서 해당 변수들은 객체의 필드가 아닌 가장 가까운 매개변수명을 가리키게 됨으로 자기 자신에게 값을 대입하는 상황이 되어 버리기에 필드 값을 가져오기 위해 this를 이용한다
- 또한 this는 인스턴스 자신을 뜻하기 때문에 객체의 메서드에서 리턴 타입이 인스턴스 자신의 클래스 타입이라면 this를 사용하여 인스턴스 자신의 주소를 반환할 수도 있습니다.
- this()
- this (필드변수명) ;
- 무조건 맨 처음에 나와야 한다
- 인스턴스 자신의 생성자를 호출하는 키워드이다.
- 생성자 오버로딩을 할 때마다 중복되는 코드를 가지는 다른 생성자를 this()로 불러 사용가능함
- this
- 접근제어자
- 선언부에 사용되어 부가적인 의미를 부여한다
- public
- 전체에서 사용가능함 클래스와 매서드 등 사용가능
- protected
- 동일 클래스 + 동일 패키지 + 자손 클래스 에서 사용가능 매서드 등 사용가능
- default
- 동일 클래스 + 동일 패키지 에서 사용가능 클래스와 매서드 등 사용가능
- private
- 동일 클래스 안에서만 사용가능 매서드 등 사용가능
- 켑슐화가 가능하다
- 캡슐화 (은닉화)
- 클래스 내부의 데이터를 보호하기 위해 이용함
- Getter 와 Setter
- 메서드의 이름만드는 규율 (Get : 필드읽기) ,(Set : 필드 수정)
- 제어자의 조합
- 클래스 : public, default, final, abstract
- 메서드 : public, protected, default, private, final, abstract, static
- 멤버 변수 : public, protected, default, private, final, static
- 지역변수 : final
- package와 import 이해
- package
- 클래스의 모음 및 클래스를 식별해주는 용도
- 상위 패키지와 하위 패키지를 [ . ] 로 구분함
- 선언으로 현제 패키지를 가져올 수 있음
- import
- 패키지와 반대로 다른 패키지를 가져온다 예시로 소스파일이 있다.
- package
상속
더보기
상속
- public class 자식클래스 extends 부모클래스 를 이용해 맴버를 상속할 수있다
- Object는 모든 클래스의 조상 클래스
- Java는 다중 상속을 허용하지 않고 단일 상속만을 허용한다
상속관계
- 상속 관계
- 토끼는 포유류다.
- 포함관계
- 토끼는 귀를 가지고 있다.
final 클래스와 final 메서드
- 클래스에 final를 선언하면 최종적인 클래스가 됨으로 더 이상 상속할 수 없는 클래스가 된다
- 메서드에 final를 선언하면 최종적인 메서드가 됨으로 더 이상 오버라이딩할 수 없는 메서드가 됩니다.
Object (객체)
- Java 클래스의 최상위 부모 클래스로 모든 클래스는 Object 의 매서드를 사용할 수 있다.
- 메서드에 final를 선언하면 최종적인 메서드가 됨으로 더 이상 오버라이딩할 수 없는 메서드가 됩니다.
오버라이딩
- 부모 클래스에서 상속 받은 메서드의 내용을 재정의 하는것
- 부모의 매서드와 일치 시켜야 한다.
- 접근 제어자를 더 작은 범위로 변경가능하지만 반대는 불가능 하다.
- 부모 보다 많은 예외선언은 불가능하다
super 와 super()
- super
- 부모 클래스를 참조 하는 키워드로
- this에서 대상이 자신이 아닌 부모로 적용된것
- super()
- 부모 클래스의 생성자를 가져오는 키워드로
- this 와 동일하게 this()와 사용법은 유사함
다형성
- 참조 변수의 타입 변환
- 자동 타입 변환
- 부모 타입 변수 = 자식 타입 객체 로 생성시 자동으로 변환됨
- [ 자식 [ 부모 ] ] 이렇게 상속받아 포함하기에 둘은 동일취급을 받기에 변환된다.
- 다만 이렇게 생성은 되도 자식타입에만 있는 필드나 메서드는 사용 불가능함
- 강제 타입 변환
- 자식클래스 인스턴스명 = (자식클래스) 부모인스턴트명; 로 사용가능함
- 자동 타입 변환을 받은 이후에 사용 가능하다
- 부모에는 없고 자식에 있는 것이 필요 할때 사용한다.
- 자동 타입 변환
- 다향성 이란
- 여러 가지 형태를 가질 수 있는 능력
- 매개 변수에도 사용이 가능하다.
- 반환 타입에도 사용 가능함
- instanceof
- {대상 객체} instance of {클래스 이름}
- 자식 클래스가 특정 클래스에 상속되어 이어져있는지 boolean으로 반환하는 메서드다
추상 클래스
- 추상 클래스란?
- 다양한 클래스들의 공통적인 부분을 쓰기 좋게 만든 클래스로
- 자체적인 몸통이 없는 클래스로 abstract 키워드로 사용가능하다.
- 추상 매서드
- abstract 변수 메서드명 (매개변수);로 { 실행 코드 } 가 없다
- 자식 클래스에 extends 추상클래스명 으로 상속 받아서 사용가능하다
- 반드시 @Override(오버라이딩) 이 필요하다.
public abstract class Car { //추상 클래스
String company; // 자동차 회사
String color; // 자동차 색상
double speed; // 자동차 속도 , km/h
public double gasPedal(double kmh) {
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public abstract void horn();// 추상 매서드
}
// 자식 클래스
public class ZenesisCar extends Car {
@Override// 자식에서 오버라이딩으로 재할당 해줘야한다
public void horn() {
System.out.println("Zenesis 빵빵");
}
}
// 매인 (실행) 클래스
public class Main {
public static void main(String[] args) {
Car car1 = new BenzCar();
car1.horn();
System.out.println();
Car car2 = new AudiCar();
car2.horn();
System.out.println();
Car car3 = new ZenesisCar();
car3.horn();
}
}
인터페이스
더보기
인터페이스
- 인터페이스는 객채를 연결하는 연결하는 다리 역활
- 스팩이 정의된 매서들의 집합
- 인터패이스 선언
- 접근제어자( public, default ) interface 인터패이스명 { 실행 코드 }
- 인터패이스 구성
- 맴버 변수는 ( public static final + 변수 변수명 ) 이지만 생략해도 된다. 자동으로 추가해준다
- 메서드는 public abstract이어야 하지만 생략이 가능하다. (static 메서드와 default 메서드 예외)
- 인터패이스 구현
- 인스턴스를 생성이 불가능하지만 추상 클래스 처럼 에 implements 키워드로 사용가능하다.
- 반드시 @Override(오버라이딩)이 필요하다.
- 인터패이스 상속
- 인터페이스 간의 다중 상속이 가능합니다, 상속은 implements 가 아니라 extends 키워드를 사용한다.
디폴트 메서드와 static 메서드
- default
- 인터페이스 안에 default void 메서드명 (매개변수){ 실행 코드 } ;
- 추상 메서드가 아니기 때문에 인터페이스의 구현체들에서 필수로 재정의 할 필요는 없다.
- static
- static void 메서드명 (매개변수){ 실행 코드 } ;
- 접근 제어자를 생략하면 컴파일러가 public을 추가함
- 인터페이스의 static 메서드 또한 객체 없이 호출이 가능, 기존 static 과 동일함
- 다향성
- 상속의 다향성과 동일함
당일 회고
- 어렵다 시간이 부족해 백준도 못풀었다. 좀더 복습이 필요함
'TIL Java' 카테고리의 다른 글
내일배움캠프 6일차 TIL _ 2주 5일차 (0) | 2024.04.26 |
---|---|
내일배움캠프 5일차 TIL _ 2주 4일차 (0) | 2024.04.25 |
내일배움캠프 3일차 TIL _ 2주 2일차 (0) | 2024.04.23 |
내일배움캠프 2일차 TIL _ 2주 1일차 (0) | 2024.04.22 |
내일배움캠프 1일차 TIL _ 1주 마지막 (0) | 2024.04.19 |