항해99

23.08.22 항해 99 16기 프로그래밍 기초2 4일차

김용글 2023. 8. 22. 22:22

오늘 공부한 것

* 3주차 강의 학습

 

오늘은 3주차 강의를 마무리 지었다

입체적으로 생각해야하는 부분들이 많아서 어려웠다

그래서 그런지 정리도하고 다시들어보고 하는데 시간이 좀 걸렸다

완전히 이해하진 못했지만 그래도 듣다보니 대략 개념정돈 알 수 있었다

 

매서드 오버로딩 매개변수의 개수, 타입, 순서등에 따라 여러 가지 기능을 할 수 있는 것

                           메서드 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야 함

                          응답값, 접근제어자만 다른 것은 안됨

                          결론 : 오버로딩은 매개변수의 차이로만 구현 가능

                          장점 : 메서드 이름 하나로 상황에 따른 동작을 개별로 정의 가능하기에 메서드 이름을 절약할 수 있다

 

기본형 매개변수 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값이 변경되지 않음

 

참조형 매개변수 주소를 알수 있기 때문에 값을 읽어오는 것은 물론 변경도 가능

 

멤버 = 필드+메서드 선언하는 방법에 따라 다르다

                                 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 객체 생성 필요 인스턴스를 통해서만 메서드가

                                                                                                      사용될 수 있다

                                 클래스 멤버 = 클래스 필드 + 클래스 메서드 객체 생성이 없어도 사용가능 고정적으로 위치

                                                                                                       java의 클래스 로더에 의해 메서드 영역에 저장되고

                                                                                                       사용됨

                                                                                                       static 키워드 사용 공용적인 데이터를 저장할 때

                                                                                                       사용하면 좋다

                                                                                                       클래스 이름으로 접근하는 것이 좋다

 

지역변수 해당 메서드가 실행될 때 마다 독립적인 값을 저장하고 관리

               메서드 내부에서 정의될 때 생성되고 종료될 때 소멸함

 

생성자 객체가 생성될 때 호출되며 객체를 초기화함

            1) 기본생성자 괄호 안에 아무것도 넣지 않은 생성자 모든 클래스는 생성자가 하나 이상 존재

                 선언과 호출 public Car () {선언} 다만, ()안에 매개변수 String model 등이 있으면

                                     Car car = new Car() 호출 / ()안에 model 이라는 String을 넣어야함 Car car = new Car (“test”)

                                     컴파일러에 의해 생성되는 기본 생성자는 해당 클래스의 접근제어자(public, )를 따른다

 

this 인스턴스 자신을 가르킴 생성자를 만들 때 이름이 겹칠 수 있음

        오류가 생기진 않지만 자기 자신에게 값을 대입하는 상황이 생길 수 있다

        예) model = model 이 아닌 this.model = model 이라고 적는게 맞다

 

this() 인스턴스 자신의 생성자를 호출

          다른 생성자를 호출할 때에는 반드시 해당 생성자의 첫줄에 작성되어야함

 

제어자 클래스, 변수, 메서드의 선언부에 사용

 

접근 제어자 폴더상에서 어디까지 노출해 줄 것인가

                    default 값은 default, 지역변수 없음

                    public 접근 제한이 전혀없다 클래스, 메서드, 멤버변수에 사용가능

                    protected 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근 가능 메서드, 멤버변수에 사용가능

                    default 같은 패키지 내에서만 접근 가능 클래스, 메서드, 멤버변수에 사용가능

                    private 같은 클래스 내에서만 접근 가능 메서드, 멤버변수에 사용가능

                    1) 접근 제어자를 이용한 캡술화 (은닉성)

                      ① 클래스 내부에 선언된 데이터를 보호하기 위해 사용

                      ② 유효한 값을 유지하도록, 함부로 변경하지 못하도록 접근 제한

                    2) 생성자의 접근제어자

                      ① 일반적으로 클래스의 접근 제어자와 일치

                   3) Getter Setter 객체의 private 필드를 읽어오거나 저장하기 위해 사용

                       직접적으로 값을 변경하거나 읽어오는 것을 막기위해 세팅하는 것

                       ① Getter 외부에서 객체의 private 한 필드를 읽을 필요가 있을 때

                            public String getModel(){ returen model }

                                             get + 필드이름

                       ② Setter 외부에서 객체의private 한 필드를 저장/수정할 필요가 있을 때 사용

                                       public String setModel (String model){ this.model = model }

                                                     set + 필드이름 외부에서 주입한 model { } 에 입력

 

사용가능한 제어자 1) 클래스 public, default, final, abstract

                               2) 메서드 public, protected, default, private, final, abstract, static

                               3) 멤버변수 public, protected, default, private, final, static

                               4) 지역변수 final 

                               5) 제어자 사용시 주의사항

                                 ① 메서드에 static abstract 함께 사용 할 수 없다

                                 ② 클래스에 abstract final을 동시에 사용할 수 없다

                                 ③ abstract 메서드의 접근제어자가 private 일 수 없다

                                 ④ 메서드에 private final을 같이 사용할 필요는 없다

 

그 외 제어자 static, final, abstract(추상화)

 

패키지 클래스의 일부분이며, 하위 패키지를 도트(.)로 구분한다.

 

상속 부모객체와 자식 객체가 존재 부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려줌

         각각의 객체를 상속 관계로 묶음으로 객체 간의 구조 파악이 쉬워지고 부모객체에 있는 것만 수정하면 자식

         객체 전부 반영되기에 일관성 유지에 좋다

          public class 자식클래스 extends 부모클래스 { }

          1) 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있다.

           2) 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 어떠한 영향도 받지 않는다.

           3) 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다

           JAVA에서 다중 상속은 허용되지 않음

 

Object 객체를 의미하며 보통 클래스를 의미하며 최상위 클래스

              1) Object clone() 해당 객체의 복제본을 생성하여 반환

              2)  boolean equals(Object object) 해당 객체와 전달받은 객체가 같은지 여부를 반환

              3) Class getClass() 해당 객체의 클래스 타입을 반환

              4) int hashCode() 자바에서 객체를 식별하는 정수값인 해시 코드를 반환

              5) String toString() 해당 객체의 정보를 문자열로 반환함 & Object 클래스에서는 클래스이름 @ 해쉬코드값

                                             리턴함

 

오버라이딩 부모클래스로부터 상속받은 매서드의 내용을 재정의 하는 것

                   1) 선언부가 부모 클래스의 메서드와 일치해야함

                   2) 접근 제어자를 부모 클래서의 메서드 보다 좁은 범위로 변경 불가

                   3) 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없다

 

super 부모 클래스의 멤버를 참조할 수 있는 키워드

           자식 클래스 내부에서 선언한 멤버와 부모 클래스에서 상속받은 멤버와 이름이 같을 경우 구분하기 위해 사용됨

 

super() 부모 클래스의 생성자 호출

 

다형성 여러 가지 형태를 가질 수 있는 능력

            1) 참조변수의 타입변환

              ① 자동타입 변환 부모타입 변수 = 자식 타입객체 는 자동으로 부모타입으로 변환

              ② 강제타입 변환 부모타입객체는 자식타입 변수로 자동 타입변환이 되지 않음

                                          타입 변환 연산자를 사용해 강제로 자식타입으로 변환 필요

                                          자동 형 변환이 완료된 경우만 돌아갈 수 있다

 

             2) instancs of 다형성 기능으로 인해 해당 클래스 객체의 원래 클래스명을 체크할 때 사용하는 명령어

                                    { 대상 객체 } instance of { 클래스 이름 } 응답값은 boolean

 

추상 클래스 미완성된 설계도 abstract를 사용

                     public abstract class 추상 클래스명 { }

                     1) 추상 메서드를 포함할수 있음 추상 메서드가 없어도 추상 클래스로 선언 가능

                     2) 자식 클래스에 상속되어 자식 클래서에 의해서만 완성될 수 있음

                     3) 여러개의 자식 클래스들에서 공통적인 필드나 매서드를 추출해서 만들 수 있다

 

추상 메서드 아직 구현되지 않은 미완성된 메서드

                     public abstract class 추상 클래스명 { abstract 리턴타입 메서드이름 (매개변수, ....) }

 

추상 클래스 상속 상속받은 클래스에서 추상클래스의 추상 메서드는 반드시 오버라이딩 되어야 한다.

                             public class 클래스명 extends 추상클래스명 {

                                 @Override

                                  public 리턴타입 메서드이름 (매개변수, ...) {

                                                    // 실행문

                                               }

                                      }

 

인터페이스 두 객체를 연결해주는 다리 역할

                   상속 관계가 없는 다른 클래스들이 메서드를 구현해야할 때 구현 클래스들의 동일한 사용 방법과 행위

                   보장이 됨

                   1) 스팩이 정의된 메서드들의 집합

                   2) 구현 클래스들은 반드시 정의된 메서드를 구현해야함

                   3) 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있음

                   4) 다형성을 적용할 수 있음

                        public 또는 default interface 인터페이스명 { } 선언

                        (1) 구현 추상클래스와 마찬가지로 직접 인스턴스 생성이 안됨

                                      반드시 오버라이딩 되어야함

                                      인터페이스의 추상 메서드 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경해야함

                        (2) 상속 인터페이스간 상속 가능 extends 키워드 사용 다중상속 가능

                        (3) default 메서드 추상 메서드의 기본적인 구현을 제공

                        (4) static 메서드 객체 없이 호출이 가능

                        (5) 다형성

                              ① 자동 타입변환 인터페이스 변수 = 구현 객체

                              ② 강제 타입변환 구현객체타입 변수 = (구현객체타입) 인터페이스 변수