2022-05-12(Java_OOP_심화)

이상수·2022년 5월 16일
0

TIL Java/Git/etc

목록 보기
12/17
post-thumbnail
  1. 시작하게 된 계기 및 다짐 😮
  • 이번 코드스테이츠의 백엔드 엔지니어링 개발자 부트캠프에 참여하게 되면서 현직개발자 분들의 빠른 성장을 위한 조언 중 자신만의 블로그를 이용하여 배운 것 들을 정리하는게 많은 도움이 된다 하여 시작하게 되었다.

    • 그 날 배웠던 것을 길지 않아도 좋으니 정리하며 복습하는 습관 기르기
    • 주말에 다음주에 배울 내용들을 예습
    • 코딩 문제와 java코드들은 꾸준히 학습
  1. 학습 목표 😮
목표결과
Java_OOP 핵심개념과 원리 이해(상속, 캡슐화)O
상속의 이해와 포함관계와의 차이 구별O
보안을 위한 캡슐화와 private의 getter/setter 메서드 이해O
  1. 정리

상속 및 포함


# 상속 

 - 기존의 클래스를 재사용하여 새로운 클래스를 작성 (상위 클래스의 멤버를 하위 클래스에) 
 - 상위 클래스(보다 추상적 개념) _ 하위클래스(보다 구체적 개념)
 ★ 상위 클래스에서 하위클래스로 확장시킨다.
 ★ 단일 상속만을 허용(중복상속 x )  ==>  비슷한 효과를 낼 수는 있음

# 포함 관계
 - 클래스의 객체를 일종의 매개변수 처럼 사용하여 다른 클래스에서 사용하는 방법
 - 해당 매개변수로 사용한 객체 클래스처럼 사용
 
 

 ex)

 class person{String name, void learn(){};}

 class Programmer extends person{String Companyname, void Coding(){};}

 public class Main{
      public static void main(String[] args[]){
	Person person = new person();
	p.name = "상수";
	p.learn();

	Programmer pg = new Programmer();
	pg.name = "상수";
	pg.learn();
	pg.companyname = "네이버"; 
	pg.Coding();


	Programmer pg2 = new Programmer();
	==> pg2.name = 상수
	
	person pg3 = new Programmer();
	==> pg3.name = sangsoo;
      }
 }
 

★★상위 클래스 선언후 하위 클래스 객체 생성 가능
   ★ex)
   
   Person _person = new Programmer();
   ==> 기본 필드는 선언된 클래스의 필드를 사용가능
   ==> 메서드는 오버라이딩 된거 를 따라감 
 






메서드 오버라이딩


# 메서드 오버라이딩 
 - 상위 클래스의 메서드를 확장한 하위 클래스에서 변경하여 사용하는 방식
 - 이를 이용해 배열로 편하게 사용가능

 1. 메서드의 정의를 상위 클래스와 완전히 일치시키기
 2. 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.(Public protect default private)
 3. 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다.

# super 와 super() 키워드
 - this 와 this() 와 비슷한 개념으로 사용
 - super : 상위 클래스의 객체  --  super() : 상위 클래스의 생성자를 의미
 - super()는 상위 클래스의 생성자를 호출한다 ( 반드시 첫 줄에 와야함)
 ★ 하위 클래스 생성자는 언제나 상위 클래스 생성자를 호출함
   ==> super() 가 없을시 컴파일러가 자동으로 상위 클래스 생성자를 호출
   
 
  ex)

 class person{String name, void learn(){
	String name = "Sangsoo"; 
 };}

 class Programmer extends person{String name, void Coding(){
	String name = "상수";

	void Coding(){
		System.out.println(this.name) ;       
		==> 상수
		System.out.println(super.name);
		==> Sangsoo
	}	 
};}

 public class Main{
      public static void main(String[] args[]){
	person test = new Programmer();
	test.Coding();
      }
 }






Object 클래스 이해


# Object 클래스 
 - 가장 최상위 클래스 (모든 클래스는 Object 클래스에서 확장된 클래스)
 - Object 클래스에 선언된 주요 메서드들

 1. toString() _ return String : 객체 정보를 문자열로 출력
 2. equals() _ return boolean : 등가 비교와 동일하게 스택 메모리값을 비교
 3. hashCode() _ return int : 객체 비교 관련 (객체를 해쉬함수를 통과한 정수로 표현)
 4. wait() _ return void : 현재 쓰레드 일시정지
 5. notifiy() _ return void : 현재 일시정지 중인 쓰레드 재동작






캡슐화_(접근제어자,패키지)

# 캡슐화 
 - 정보은닉 , 외부로부터 객체의 속성과 기능이 함부로 변경되지 못하게 막기 위함
 - 데이터의 보호목적과 데이터의 외부노출 방지
 ==> 유지보수와 확장성 용이


# 패키지 
 - 특정한 목적을 공유하는 클래스와 인터페이스 묶음 (패키지 = 하나의 디렉토리)
 - package 패키지명.    -->   현재 패키지에 속해져 있다는 것 ( 디렉토리 계층 구조)

 - import 패키지명.클래스명; or import 패키지명.*;

# 접근제어자(public,protected,(default,private)
 - protected : 다른 패키지의 하위 클래스 o 내부에서 사용가능(다른 패키지에서 해당 클래스의 자식 클래스 에서만)
 - 기타 제어자 : static,final,abstract,native,transient,synchronized 등

★ 엔트리포인트 : 운영체제에서 프로그램으로 이동하여 시작하는 진입점(Public static void main)


# getter/setter 메서드
 - private 접근제어자가 포함되어 있는 데이터값을 수정하거나 추가하고 싶을대 사용
 ex) get**(); , set**();
 






  1. 피드백 😮
  • 자바의 객체지향 방식의 상속, 캡슐화를 공부하였다. 상속의 개념은 간단히 하여 객체를 추상화시켜 객체들의 공통점을 상위 클래스로 정의해 놓는 방식이고, 하위 클래스에서 상속을 통하여 오버라이딩(재정의)를 통해 각 객체의 특징들을 주어 생성하는 방식이다.

  • 캡슐화의 경우, 핵심데이터가 외부로 노출되는 것을 피하기위하여 접근제어자인 private을 이용하여 객체의 정보를 보호함과 동시에 getter/setter 메서드를 통해 해당 객체의 멤버에 접근하는 방식이다.
    이는, 유지보수의 장점과 보안, 협업등에서 많은 도움이 될 수 있을것 같다.

  1. 앞으로 해야 될 것 😮
  • 매일 꾸준히 할 것
    • 꾸준히 velog 작성
    • Java 언어 및 Algorithm 공부(Coding-Test)
    • 틈틈히 운동 하기

  • 내일 해야 할 것
    • Java의 다형성, 참조타입변환 , instanceof 연산자
    • java_OOP의 핵심개념 중 하나인 추상화/인터페이스를 배우고 이를 이해 및 활용
profile
Will be great Backend-developer

0개의 댓글