본문 바로가기

클래스10

클래스와 객체 ○ 클래스 : 객체를 생성하기 위한 틀 ex) 클랙스 = 붕어빵 틀, 객체 = 붕어빵 ○ 형식 *클래스 생성시 매개변수는 반드시 self 라고 지정해야함 class 클래스명: def__init(self, 매개변수1, 매개변수2): self.속성1 = 매개변수1 self.속성2 = 매개변수2 #1. 클래스 기본 및 객체생성 #클래스생성 class Person: def __init__(self): self.hello = 'hi' def greeting(self): print(self.hello) #객체/인스턴스 생성 p = Person() p.greeting() #클래스에서 지정한 greeing 메서드 호출 #2. 매개변수 받는 클래스 및 객체생성 #클래스 생성 및 매개변수 3개 지정 class Per: d.. 2023. 10. 13.
Step20. 람다식(Lamda) □ 람다식 ○ 익명함수(anoymous function)을 이용해서 익명 객체를 생성하기 위한 식 ○ 기본적으로 함수를 만들어 사용한다고 생각하면 됨 ○ 장점 : 코딩 공수가 줄며 편하고 효율적임 예제 1) 인터페이스 생성 package person_test; //인터페이스 생성 public interface LamdaInterface1 { //선언부 public void method(String s1, String s2, String s3); } 예제 2) 생성된 인터페이스를 바탕으로 객체 생성 및 람다식 적용 package person_test; public class LamdaInterface1_Main { public static void main(String[] args) { LamdaInter.. 2023. 9. 26.
Step19. 추상 클래스(abstract) ○ 클래스의 공통된 부분을 뽑아서 별도의 클래스 즉, 추상클래스를 만들어 놓고 이를 상속해서 사용 ○ 추상 클래스의 특징 - 멤버변수를 가짐 - 추상클래스를 상속하기 위해서는 extends를 이용 - 추상 메서드를 가지며 상속한 클래스에서 반드시 구현해야함 - 일반 메서드도 가질수 있음 - 일반 클래스와 마찬가지로 생성자도 있음 ○ 추상 클래스와 인터페이스 공통점 - 추상 메서드를 가짐 - 객체 생성이 불가하며 자료형 타입으로 사용 ○ 추상 클래스와 인터페이스 차이점 - 추상 클래스 : 상수, 추상세서만 가짐. 추상 메서드를 구현만 하도록함. 다형성을 지원 - 인터페이스 : 클래스가 가지는 모든 속성과 기능을 가짐. 추상 메서드 구현 및 상속의 기능을 가짐. 단일 상속만 지원. 예제 1) 추상클래스 생성.. 2023. 9. 26.
Step18. 인터페이스(Interface) □ 인터페이스 ○ 클래스와 달리 객체를 생성할 수 없으며, 클래스에서 구현해야할 작업 명세서임 ○ 클래스에서 인터페이스를 구현하는 단계. 이때 인터페이스는 상세한 내역은 없고 껍데기만 있음 ○ public class 클래스명 + implements + 인터페이스A, 인터페이스B, 인터페이스C ~ ○ 사용이유 : 인터페이스를 사용하는 이유는 많지만 가장 큰 이유는 객체가 다양하 자료형(타입)을 가질 수 있기 때문 예제 1) 인터페이스 2개 생성 package pjt_test; //인터페이스 생성 public interface InterfaceA { //인터페이스상에서 메서드 선언만 할뿐 정의는 하지 않음 //정의는 {}활용 public void funA(); } package pjt_test; //인터페이.. 2023. 9. 25.
Step17. 내부클래스와 익명클래스 □ 내부클래스(inner) : 클래스 안에 또 다른 클래스를 선언하는 것으로 이렇게 하면 두 클래스의 멤버에 쉽게 접근 가능 예제1) 클래스 파일 생성 및 내부클래스, Static클래스 지정 package person_test; public class Outer_Class { //클래스 속성지정 int num = 10; String str1 = "java"; //static 을 활용하여 어디서나 공유가능한 속성 static String str11 = "world"; //생성자 public Outer_Class() { System.out.println("최초 생성자"); } //내부 클래스 생성 class InnerClass{ //내부클래스 속성 지정 int num = 100; String str2 = ".. 2023. 9. 25.
Step15. 상속과 Private 접근자 □ 상속 ○ 기존에 만들어진 클래스의 기능을 상속받아서 새로운 클래스를 쉽게 만들 수 있는 것 ○ 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 속성과 기능도 이용할 수있음 ○ 부모클래스로부터 속성과 기능을 상속받아 생성된 자식클래스를 활용하여 생성된 객체는 부모/자식클래스의 속성과 기능을 활용할 수 있음 ○ 상속의 필요성 : 기존의 검증된 Class를 이용해서 빠르고 쉽게 새로운 Class를 만들 수 있음 ex) 할아버지 G음식점 개업 - 아버지 G음식점 인수 및 메뉴 개발 - 아들 G음식점 인수 및 기존 메뉴개선&신메뉴 개발 ○ exten 키워드를 이용해서 상속 구현 ○ Java는 단일상속만 가능함 □ 부모클래스의 private 접근자 ○ 자식클래스는 부모클래스의 모든 자원을 사용할 수 있지만,.. 2023. 9. 25.
Step14. 데이터은닉과 Getter/Setter □ 데이터 은닉 ○ 멤버변수(속성)는 주로 private으로 설정하여, 외부로부터 데이터가 변질되는 것을 막을 수 있음 ○ 매개변수로 받는 데이터를 변질 되지 않도록 public이 아닌 private으로 클래스 변수 지정 ○ 데이터(속성)변질이 우려되는 시나리오 - 급여 프로그램에서 급여 담당자가 실수로 급여액을 잘못 입력할 경우 - 변경될 수 없는 사번이 변경되는 경우 □ Setter, Getter ○ 클래스에서 지정한 속성을 은닉처리 즉, Private으로 지정하면 기존 객체에서 받은 최초의 값을 업데이트 할 수 없음 ○ 이를 위해 Getter와 Setter를 지정하여 데이터은닉처리된 속성에 대한 받은 값이 지속해서 업데이트 될 수 있도록 할 수 있음 예제1) 클래스 파일 + Private으로 클래스.. 2023. 9. 24.
Step12. 생성자와 전역/지역/매개변수, this □생성자 : 객체가 생성될때 호출되는 생성자 (1) 디폴트생성자 : 객체가 생성될 때 가장 먼저 호출되는 생성자로, 만약 개발자가 명시하지 않아도 컴파일 시점에 자동 생성됨 예제 1) 클래스 생성 package pjt_test; public class Newer_Class { //Newer_Class 클래스의 생성자 지정 public Newer_Class() { System.out.println("나는 생성자"); } } 예제 1-1) 객체 생성 package pjt_test; public class Newer_Class_Main { public static void main(String[] args) { //클래스에 대한 객체 생성과 동시에 생성자 바로 출력됨 Newer_Class newer_Class.. 2023. 9. 24.
Step11. 객체와 메모리 □ 메모리에서 객체는 동적생성됨 ○ 객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요없게되면 GC(Garbage Collector)에 의해서 제거됨 * GC로 인하여 효율적인 메모리 관리 및 유지가 가능 ○ 객체가 생성되면 메모리에 저장됨과 동시에 객체위치를 가르키는 즉, 레퍼런스 주소 또한 메모리에 저장됨 □ 자료형이 같아도 다른객체임 ○ 클래스가 같다고 객체 또한 같은 것은 아님. 출력주소를 보면 다른것을 알 수 있음. □ null 과 NullPointException ○ 레퍼런스에 Null이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없음 예제1) 클래스 생성 package pjt_test; public class ObjectClass { //클래스 생성자 public Ob.. 2023. 9. 22.