공부/OOP 7

상속

OOP 의 핵심중 하나 다형성의 기반 is-a 관계 부모 클래스 멤버 변수가 private 일때 자식클래에스에서 부모 클래스 멤버변수에 접근하고 싶다면 protected로 바꿔주면 된다. 외부 클래스는 접근할 수 없음 클래스 내부,같은 패키지에 속한 클래스,자식 클래스만 접근가능 is-a관계 상속관계 수학에서 부분 집합 관계 A student is a Person has-a관계 컴포지션 관계 가지고있는(포함) 관계 Casting 부모 ← 자식 암시적 캐스팅 Person 이 부모 Student 가 자식일 때 Student s1 = new Student(); Person = (Person) s1; // (person)생략가능 컴파일러가 해줌. 캐스팅은 형제간에 불가능하다 (부모 자식간에만 가능.) insta..

공부/OOP 2023.12.13

Singleton

어떤 클래스에서 만들 수 있는 인스턴스 수를 하나로 제한 하는 패턴 다음과 같은 조건을 충족하는 객체에 적합 프로그램 실행중 최대 하나만 있어야함. 프로그램 설정, 파일 시스템 등.. 이 객체에 전역적으로 접근이 가능해야함. 특징 private 생성자 static 메서드를 통해서만 객체를 얻어올 수 있음. 아직 객체가 없는 경우 객체를 생성한 후 static변수에 저장 static 변수에 저장된 객체를 반환 객체가 있는 경우 static 변수에 저장된 객체를 반환. 예시 코드 public class Singleton{ private static Singleton instance; private Singleton(){ //private이기에 여기서 new 생성자를 하지 못함. get메서드를 통해야 생성 가..

공부/OOP 2023.12.13

Static

Static method: new를 이용해서 개체를 만들지않고 메서드를 호출한다 클래스: 개체보다 상위 개념에 있는 것. 클래스: 공장의 개념 개체 : 공장에서 찍어낸 제품의 개념 이라 생각하면 쉽다. public void method1(){} 은 개체의 메서드 public static void staticMethod(){} 는 클래스의 메서드 스태틱 메서드에서는 스태틱 필드값만 접근할 수 있다. 정적메서드에서 비정적 값에 접근 불가 왜냐, 비정적값은 개체에 속한 멤버이기 때문 개체수 만큼 멤버 변수가 생기는데 클래스는 단 하나기 때문. 스태틱 메서드에서는 수많은 개체 중 어떤 값을 가져올지 특정할 수 없다. 다만 비정적 → 정적으로 접근은 가능~

공부/OOP 2023.12.13

getter,setter

어차피 게터 세터로 프라이빗 데이터를 꺼내오고 조작할 수 있다면 그냥 Public으로 접근제어자를 지정하는게 좋지 않을까 생각할 수 있다. getter,setter Method를 사용하는 이유를 알아보자 멤버 변수를 저장하지 않고 필요할 때 마다 getter에서 계산이 가능하다. ex) 질량과 중력 멤버 변수를 계산하여 무게라는 값을 구할 수 있다. setter에서 추가적인 로직을 실행할 수 있다. ex) 나이라는 필드값 setting 시 음수 값이 들어올 경우 무시하는 로직을 짠다. 상속을 통해 다형성 구현 가능 멤버 변수는 그냥 앵간하면 Private으로 가자. 정보 숨기기를 통하여 캡슐화 진행. 또한 getter는 자유롭게 설정하되, setter는 충분히 고민 후 사용하도록 하자. 아무생각없이 게터..

공부/OOP 2023.12.13

OOP의 특성

1.캡슐화. 데이터와 그 데이터에 작용하는 메서드를 하나로 묶음 정보 숨기기: 개체안에 있는 데이터를 외부로부터보호 외부: 다른 클래스에 속한 객체들 2.상속 이미 존재하는 개체를 기반으로 확장된 개체를 만드는 방법 기존의 개체에 속한 데이터와 동작을 모두 물려받음 여기에 다른 데이터나 동작을 추가할 수 있음. 실용적인 용도: 코드 중복을 막음 3.다형성 OOP의 핵심 같은 지시를 내렸는데 다른 종류의 개체가 동작을 달리하는것. 같은지시: 동일한 함수 시그니처 호출 달리 동작: 개체의 동작에따라 실행되는 함수 구현 코드가 다름. 어떤 함수 구현이 실행될지는 실행중에 결정됨 다형성의 혜택을 받으려면 상속 관계가 필요. 실용적 용도: 부모의 형을 저장하는 배열에 모든 자식 객체를 저장. Animal[] 배열..

공부/OOP 2023.12.13

객체지향 프로그래밍의 필요성

절차지향 언어에서 사용하는 구조체(Struct)의 단점을 보완하기위해 객체지향 프로그래밍이 사용된다. 우선 구조체의 단점을 알아보자 구조체와 구조체 데이터의 동작을 담당하는 메서드 서로가 분리 되어있다. struct Human{ int age; float height; } void Walk(Human* human){ } // 절차지향언어인 C의 struct는 이렇게 데이터와 동작이 분리되어있다. 데이터와 각각의 동작을 일일히 찾아봐야하기때문에 코드가 복잡해진다. 이렇게 구조체안에 함수까지 담기위한 고민들속에서 객체지향 언어가 태어났다. OOP(Object Oriented Programming) 객체는 상태(속성)를 가질뿐만 아니라 동작도 할 수 있다. 프로그램을 구성하는 기본 요소를 객체로 보려는 노력...

공부/OOP 2023.12.13