속성이 바뀌는 값, 기능은 안바뀌는 값!
붕어빵틀을 상상해보면 이해하기 쉬움
실습 : 비행기 클래스를 만들고 비행기 객체 5개를 생성해보자
실습 : 계산기 클래스를 만들고 사칙연산을 실행해 보자.
실습 : 국어, 영어, 수학 점수를 입력받아 리스트에 저장하고, 원본을 유지한 상태로 복사본을 만들어 과목별 점수를 10% 올렸을 경우에 평균을 출력해보자
객체와 메모리와의 관계 : 레퍼런스 변수를 복사하면 객체가 복사되는것이 아닌 메모리주소가 복사되는 것!
새로운 객체를 만들고 싶다! 하면 copy()함수를 이용해서 복사하면 된다!
- 깊은 복사를 하기 위해서 사용하는 함수
for문
for s in scores:
scoresCopy.append(s)
print(f'id(secores) : {id(secores)'}
print(f'id(secoresCopy) : {id(secoresCopy)}')
extend()
scores.Copy.extend(scores)
print(f'id(scores):{id(scores)})
print(f'id(secoresCopy) : {id(secoresCopy)}')
copy()
scoresCopy = scores.copy()
print(f'id(scores): {id(scores)})
print(f'id(secoresCopy) : {id(secoresCopy)}')
[:]
scoresCopy = scores[:]
print(f'id(scores): {id(scores)})
print(f'id(secoresCopy) : {id(secoresCopy)}')
실습 : 선수의 원본 점수를 이용해서 평균을 출력하고, 최고값과 최저값을 제외한 평균을 출력하는 프로그램을 만들어보자.
실습 : 덧셈, 뺄셈 기능이 있는 클래스를 만들고, 이를 상속하는 클래스를 만들어서 곱셈과 나눗셈 기능을 추가해보자!
객체가 생성될 때 생성자를 호출하면 __init__() 가 자동 호출된다.
__init__()가 속성을 초기화 한다.
- 만약 상위 클래스의 속성도 같이 나오게 하고 싶다면!
- 더 깔끔한 방법으로는 super() 함수를 써준다
실습 : 중간고사 클래스와 기말고사 클래스를 상속관계로 만들고 각각의 점수를 초기화 하자. 또한 총점 및 평균을 반환하는 기능도 만들어보자
실습 : BasicCalculator와 DeveloperCalculator 클래스를 다음과 같이 만들고 이들 클래스를 상속해서 Calculator 클래스를 만들어보자
실습 : 삼각형 넓이를 계산하는 클래스를 만들고 이를 상속하는 클래스에서 getArea()를 오버라이딩 해서 출력 결과가 다음과 같을 수 있도록 클래스를 만들어보자.
추상클래스는 객체 지향 프로그래밍에서 중요한 개념 중 하나.
계약 규약 정의:
추상클래스를 사용하면 해당 클래스를 상속받는 서브클래스들이 특정 메서드를 반드시 구현하도록 강제. 이는 일종의 "계약"을 정의하는 것. 서브클래스는 최소한의 인터페이스를 구현해야만 기대한 동작을 할 수 있도록 하는 것이 중요.코드의 일관성 유지:
추상클래스는 공통된 행동이나 속성을 정의할 때 사용. 이를 통해 코드의 일관성을 유지하고 중복을 피할 수 있음. 모든 서브클래스가 공통된 특성을 가지도록 강제함으로써 코드의 일관성을 높일 수 있음.다형성과 인터페이스 구현:
추상클래스를 통해 다형성을 구현. 추상클래스를 상속받은 여러 서브클래스가 공통된 인터페이스를 제공함으로써 코드의 유연성을 높일 수 있음.프로그램 구조화:
추상클래스를 사용하면 프로그램의 구조를 논리적으로 나눌 수 있음. 공통된 부분을 추상클래스에 두고, 각 서브클래스에서는 그에 특화된 부분을 구현함으로써 코드를 모듈화하고 관리하기 쉬움.
간단히 말하면, 추상클래스는 코드의 일관성, 유지보수성, 확장성을 향상시키기 위해 사용.
출처 : 제로베이스 데이터분석스쿨