본문 바로가기

객체13

클래스/객체지향 □ 절차지향과 객체지향 프로그래밍 ○ 절차지향 프로그래밍 : 1990년대 이전 언어는 대부분 절차지향 프로그래밍 - 파스칼, 코블, 포트란, C언어 등 - ex) 냉장고에 코끼리를 넣는다 냉장고 문을 연다 코끼리를 냉장고에 넣는다 냉장고 문을 닫는다 ○ 객체지향 프로그래밍 - class : 해당 사물을 나타낼수 있는 설계도를 만듬 - object : 해당 사물의 설계도로를 기반으로 사물객체를 만듬(객체의 속성/변수과 함수정의) - attribute, method : 사물 객체의 기능을 호출 (attribute : 사물 객체의 변수 / method : 사물 객체의 함수) - ex) 코끼리라는 사물의 기능, 정보관련 설계도를 만듬 만들어진 설계도 기반으로 코끼리 객체 만듬 냉장고라는 사물의 기능, 정보관련 .. 2023. 12. 11.
클래스와 객체 ○ 클래스 : 객체를 생성하기 위한 틀 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.
Step16. 오버라이드(Override)와 Super 클래스 □ 메서드 오버라이드(override) ○ 부모 클래스의 기능을 자식 클래스에서 재정의해서 사용 * 부모클래스명에 커서를 넣고 ctrl+t를 누르면 모든 상속관계를 조회할 수 있음 □ 자료형(타입) : 기본 자료형처럼 클래스도 자료형임 □ Super 클래스 : 상위 클래스를 호출할때 super 키워드를 이용 예제1) 부모클래스 생성 및 속성/메서드 정의 package person_test; //부모클래스 메서드 생성 public class China_Food_Parents { //클래스 속성 지정 int openYear = 1900; //부모클래스 생성자생성 public China_Food_Parents() { System.out.println("나는 생성자"); } //부모클래스 메서드 생성 publi.. 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.