TIL 8 [ Java(final, static, 인터페이스, 객체지향) ]

2025. 2. 26. 21:53·[내일배움캠프-Sparta]/Spring 6기
반응형

1. 오늘 학습 키워드 : Java 프로그래밍 ( final , static, 인터페이스, 객체지향(캡슐화,상속,추상화,다형성) )

2. 학습 내용을 나만의 언어로 정리
Java는 객체지향 프로그래밍 언어이다.


3. 학습내용

[2-4 Static - 클래스가 공유하는공간]  ex) 공용 게시판

static은 모든 객체가 함께 사용하는 변수나 메소드를 만들때 사용된다.

객체를 생성하지 않아도, 클래스 이름만으로 바로 사용 가능

Static변수와 메소드는 1번만 생성되고, Method 영역에 저장된다.

 

인스턴스멤버 (인스턴스 변수 + 인스턴스 메소드)   인스턴스는 Heap영역

객체를 만들때 마다 생성되는 변수와 메소드, 객체(인스턴스)를 생성한 후에만 사용가능

각 객체가 개별적으로 값을 가짐 ( 공유 x )

 

클래스 멤버 ( 클래스 변수 + 클래스 메소드 )  - static 키워드 [클래스명.(메소드,필드명) 으로 호출 가능]

 

※ 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(); → 기기를 끄는 기능
  • 각 가전제품의 기능을 확장해보세요. 

Q1 풀이 (인터페이스 활용)

[2-7 객체지향 - 캡슐화]

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

접근 제어자 종류

캡슐화가 잘된 클래스는 내부 데이터를 private로 보호하고 있음.

데이터 조회나 변경이 필요시 안전한 접근법 ☞ setter / getter 

 

※ 무분별한 세터

  • 접근 제어자로 데이터를 보호 → private로 변수를 선언한다.
  • setter 추가후 private변수여도 setter로 데이터가 변경됨.
  • 안전한 데이터 설정 로직을 추가 → setter 메소드 내 조건식을 추가해 위험한 데이터 입력을 방지

무분별한 세터 방지법 ( "B" 문자열이 들어오면 폭발!! )

[2-8 객체지향 - 상속]  

클래스간의 관계를 부모(상위), 자식(하위)로 바라보는 개념.  extends 키워드 사용

상속에서는 재사용성, 확장 가능.  코드 중복을 줄이고, 유지보수성이 오른다.

1. 재사용성

부모 클래스의 내용을 물려 받아서 그대로 재사용이 가능함.
super - 부모인스턴스, 부모클래스의 변수, 메소드에 접근식 사용하는 키워드

★ 생성자는 부모가 있어야 자식이나옴 
public child() {
   super(); // << 부모가 먼저 생성되어 있어야 자식도 사용가능함.
}

2. 확장
부모 클래스의 기능을 유지하면서, 자식 클래스에서 기능을 확장. ( 자식클래스 고유의 기능을 추가 가능 - 부모는 사용못함 X)
3. 메소드 오버라이딩
부모 클래스의 기능을 재정의 함. ( 단, 메소드 명, 매개변수, 반환타입이 모두 동일 해야함. )
4. 추상 클래스
객체를 생성할 목적이 아닌 "설계도" 역할 할때 적합함.
abstract 키워드로 클래스 선언시 추상클래스 ( 객체 생성 X )
                             메소드로 선언시 자식클래스에서 강제로 구현해야함.

상속의 구조
결과값

※ 추상 클래스 vs 인터페이스

상속이 계층적 구조를 선언하기 적합.

인터페이스는 표준을 제공하는데 적합.

계층적 구조를 표현하면서, 공통 속성과 기능을 재사용 할 때, 추상클래스를 사용하는것이 적합.

 

※ Java의 최상위 클래스는 Object(tostring(), equals() 함수 내장)

[2-9 객체지향 - 추상화] 

불필요한 정보를 제거하고, 본질적인 특징만 남기는 개념이다.

인터페이스나 클래스로 상속을 활용해서 추상 계층 표현이 가능하다.

예) 계층적 구조

*실습문제*

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

Q1 풀이과정 ( 추상화 )
Q1 결과값 ( 추상화 )

[2-10 객체지향 - 다형성]  

하나의 타입으로 여러 객체를 다룰수 있는 기술 

예) 다형성 예시

형변환(Casting) - 부모타입으로 자식타입을 다룰수 이쓴ㄴ 이유는 자동으로 형변환 발생.

자식 > 부모 : 업캐스팅

부모 > 자식 : 다운 캐스팅

 

※ 업캐스팅 주의사항

부모타입으로 데이터를 다룰수 있지만, 자식 클래스의 고유기능을 활용할 수 없다.  ☞ 다운 캐스팅 필요

다운캐스팅 방법

 

 

*실습문제*

💬 Q1. 클래스를 활용해서 위 내용의 3단계 계층 구조를 설계해보세요.

💡

요구사항

    • 다형성을 직접 활용해보세요.
    • 업캐스팅과 다운캐스팅을 직접 구현해보세요.
    • 다운캐스팅 시 instanceof 를 사용해보세요. 
    • 장치 > 핸드폰 > 삼성, 애플  계층구조로 구현함. 

Q1 풀이 ( 다형성 )

- 새롭게 알게 된 점 :  다운캐스팅, 업캐스팅, 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
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 10 [ Java(람다식, 스트림, 쓰레드) + 계산기 과제 1단계 ]
  • TIL 9 [ Java(예외처리, Optional, 제네릭, 컬렉션) ]
  • TIL 7 [ Java(조건/반복문, 배열 , 메소드) ]
  • TIL 6 [ Java( 개념,변수,입출력, 데이터타입, 연산자) ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    spring
    Testcode
    Til
    네트워크
    cs
    웹
    SQLD
    알고리즘
    백엔드
    It
    내일배움캠프
    docker
    db
    SQL
    세션
    배포
    코딩테스트
    Java
    운영체제
    KPT
    network
    Python
    web
    OS
    컴퓨터구조
    CPU
    메모리
    개발자
    AWS
    트랜잭션
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 8 [ Java(final, static, 인터페이스, 객체지향) ]
상단으로

티스토리툴바