1. 오늘 학습 키워드 : Java 프로그래밍 ( final , static, 인터페이스, 객체지향(캡슐화,상속,추상화,다형성) )
2. 학습 내용을 나만의 언어로 정리
Java는 객체지향 프로그래밍 언어이다.
3. 학습내용
[2-4 Static - 클래스가 공유하는공간] ex) 공용 게시판
static은 모든 객체가 함께 사용하는 변수나 메소드를 만들때 사용된다.
객체를 생성하지 않아도, 클래스 이름만으로 바로 사용 가능
Static변수와 메소드는 1번만 생성되고, Method 영역에 저장된다.
인스턴스멤버 (인스턴스 변수 + 인스턴스 메소드) 인스턴스는 Heap영역
객체를 만들때 마다 생성되는 변수와 메소드, 객체(인스턴스)를 생성한 후에만 사용가능
각 객체가 개별적으로 값을 가짐 ( 공유 x )
클래스 멤버 ( 클래스 변수 + 클래스 메소드 ) - static 키워드 [클래스명.(메소드,필드명) 으로 호출 가능]
※ static 메소드는 인스턴스 변수에 접근할 수 없다. ☞ 객체를 생성하지 않기 때문
static은 꼭 필요할때만 사용. static은 변수와 메모리는 프로그램이 종료 될때까지 메모리에 유지됨.
→ 너무 많은 static 남용시, 메모리 낭비

[2-5 final]
final을 붙이면, 변수를 1번만 설정할 수 있다.
// final은 변수나 클래스, 메소드 등 한번 정하면 다신 변경 불가능하게 만든다.
// 메소드 오버라이딩 불가능.
final int num = 5;
// num = 2; ( X ) 에러 발생
System.out.println(num); // 5
상수(Constant) - 변하지 않고 일정한 값을 갖는수 ( 전부 대문자로 표현 )
프로그램 실행중 절대 변경되서는 안되기 때문에 static final 키워드를 사용함.
// 상수는 대문자로 표현
static final double PI = 3.14;
불변 객체 - 내부 상태를 변경할수 없는 객체
setter없이 설계
※ 참조 변경은 막아주나, 내부 상태 변경은 막지않는다.

[2-6 인터페이스]
클래스가 따라야할 최소한의 공통 규칙을 정의하는 역할 ( 설계 표준 ) ex) 사람의 공통기능 > 말하기,쓰기, 숨쉬기등..
인터페이스를 활용해 최소한의 규격을 정의함. implements 키워드 사용
세부적인 구현은 각 클래스에 맡기며, 일관성을 유지하면서, 클래스가 고유한 특색을 확장할 수 있도록 도와준다.
※ 인터페이스는 다중상속 가능 ( 클래스는 X ) , 클래스는 다중 구현(implements 중복) 가능
※ 인터페이스 내에서 변수 선언시, 자동으로 상수로 선언된다.
public interface Devices {
int NUM = 1; // public static final int num = 1; 로 인식함.
}
*실습문제*
💬 다양한 가전제품을 일관된 방식으로 조작할 수 있는 인터페이스를 설계하세요.
💡
요구사항
- 가전제품 종류: Tv, 에어컨, 컴퓨터
- turnOn(); → 기기를 켜는 기능
- turnOff(); → 기기를 끄는 기능
- 각 가전제품의 기능을 확장해보세요.

[2-7 객체지향 - 캡슐화]
객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 개념 ( 비밀, 민감정보등 보호 필요 ! ! ) ☞ 접근제어자 필요

캡슐화가 잘된 클래스는 내부 데이터를 private로 보호하고 있음.
데이터 조회나 변경이 필요시 안전한 접근법 ☞ setter / getter
※ 무분별한 세터
- 접근 제어자로 데이터를 보호 → private로 변수를 선언한다.
- setter 추가후 private변수여도 setter로 데이터가 변경됨.
- 안전한 데이터 설정 로직을 추가 → setter 메소드 내 조건식을 추가해 위험한 데이터 입력을 방지

[2-8 객체지향 - 상속]
클래스간의 관계를 부모(상위), 자식(하위)로 바라보는 개념. extends 키워드 사용
상속에서는 재사용성, 확장 가능. 코드 중복을 줄이고, 유지보수성이 오른다.
| 1. 재사용성 부모 클래스의 내용을 물려 받아서 그대로 재사용이 가능함. super - 부모인스턴스, 부모클래스의 변수, 메소드에 접근식 사용하는 키워드 ★ 생성자는 부모가 있어야 자식이나옴 public child() { super(); // << 부모가 먼저 생성되어 있어야 자식도 사용가능함. } |
| 2. 확장 부모 클래스의 기능을 유지하면서, 자식 클래스에서 기능을 확장. ( 자식클래스 고유의 기능을 추가 가능 - 부모는 사용못함 X) |
| 3. 메소드 오버라이딩 부모 클래스의 기능을 재정의 함. ( 단, 메소드 명, 매개변수, 반환타입이 모두 동일 해야함. ) |
| 4. 추상 클래스 객체를 생성할 목적이 아닌 "설계도" 역할 할때 적합함. abstract 키워드로 클래스 선언시 추상클래스 ( 객체 생성 X ) 메소드로 선언시 자식클래스에서 강제로 구현해야함. |


※ 추상 클래스 vs 인터페이스
상속이 계층적 구조를 선언하기 적합.
인터페이스는 표준을 제공하는데 적합.
계층적 구조를 표현하면서, 공통 속성과 기능을 재사용 할 때, 추상클래스를 사용하는것이 적합.
※ Java의 최상위 클래스는 Object(tostring(), equals() 함수 내장)
[2-9 객체지향 - 추상화]
불필요한 정보를 제거하고, 본질적인 특징만 남기는 개념이다.
인터페이스나 클래스로 상속을 활용해서 추상 계층 표현이 가능하다.

*실습문제*
- 💬 Q1. 스스로 주제를 정하고 인터페이스와 클래스를 활용하여 3단계 이상의 추상 계층을 구현해 보세요.
- 수업에서 배운 계층 구조와 동일하게 만들면 됩니다.
- 정답이 정해져 있지 않으니 자유롭게 상상하며 코딩해 보세요! </aside>


[2-10 객체지향 - 다형성]
하나의 타입으로 여러 객체를 다룰수 있는 기술

형변환(Casting) - 부모타입으로 자식타입을 다룰수 이쓴ㄴ 이유는 자동으로 형변환 발생.
자식 > 부모 : 업캐스팅
부모 > 자식 : 다운 캐스팅
※ 업캐스팅 주의사항
부모타입으로 데이터를 다룰수 있지만, 자식 클래스의 고유기능을 활용할 수 없다. ☞ 다운 캐스팅 필요

*실습문제*
💬 Q1. 클래스를 활용해서 위 내용의 3단계 계층 구조를 설계해보세요.
💡
요구사항
- 다형성을 직접 활용해보세요.
- 업캐스팅과 다운캐스팅을 직접 구현해보세요.
- 다운캐스팅 시 instanceof 를 사용해보세요.
- 장치 > 핸드폰 > 삼성, 애플 계층구조로 구현함.

- 새롭게 알게 된 점 : 다운캐스팅, 업캐스팅, Object 최상위 클래스의 내장함수
4. 내일 학습 할 것: 자바 강의 3주차 강의, Java 총정리 복습
'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글
| TIL 10 [ Java(람다식, 스트림, 쓰레드) + 계산기 과제 1단계 ] (0) | 2025.02.28 |
|---|---|
| TIL 9 [ Java(예외처리, Optional, 제네릭, 컬렉션) ] (0) | 2025.02.27 |
| TIL 7 [ Java(조건/반복문, 배열 , 메소드) ] (0) | 2025.02.25 |
| TIL 6 [ Java( 개념,변수,입출력, 데이터타입, 연산자) ] (0) | 2025.02.24 |
| TIL 5 [ Linux명령어, git 복습 ] (0) | 2025.02.21 |