oop java introduction object oriented programming java
이 비디오 자습서에서는 객체, 클래스, 상속, 다형성, 추상화, 캡슐화 등과 같은 Java의 OOP (객체 지향 프로그래밍) 개념을 소개합니다.
소프트웨어 프로그래밍에는 다양한 유형의 프로그래밍 언어가 있습니다. 그중 주요 언어는 본질적으로 절차 적이거나 객체 지향적입니다.
절차 적 프로그래밍 언어에서 더 큰 문제는 작은 해결 가능한 문제로 나뉩니다. 이러한 작은 문제는 절차 또는 기능으로 변환됩니다. 이런 식으로 절차 적 프로그래밍 언어는 데이터보다는 기능을 강조합니다. 따라서 절차 언어는 데이터를 완전히 무시하고 데이터 보안을 전혀 보장하지 않습니다.
이 문제는 객체 지향 프로그래밍 언어로 처리되었습니다. 객체 지향 프로그래밍은 객체를 조작하여 소프트웨어를 설계하고 프로그래밍하는 방법이며 객체는 프로그래밍의 주요 부분입니다.
초보자를위한 전체 Java 자습서 시리즈 살펴보기 여기 .
학습 내용 :
OOPS 개념에 대한 비디오 자습서
자바의 OOPS 개념 – 1 부 :
Java의 OOPS 개념 심층 살펴보기 – 2 부 :
객체 지향 프로그래밍 언어는 함수보다 데이터를 더 강조합니다. 객체 지향 프로그래밍 (OOP)은 객체, 즉 실시간 엔티티를 중심으로 회전합니다.
이 개체는 데이터와이 데이터에 대해 작동하는 메서드를 하나의 단위로 묶습니다. 이렇게하면 개체 내부에 메서드를 포함하여 데이터가 외부 세계로부터 보호됩니다. OOP에서 개체는 메시지를 통해 서로 통신합니다.
모든 OOP 언어는 다음 기능을 지원합니다.
- 클래스
- 캡슐화
- 추출
- 계승
- 다형성
이러한 모든 기능은 데이터 보안을 보장하는 동시에 강력한 애플리케이션을 작성할 수도 있습니다. Smalltalk, C ++, Java 등은 객체 지향 프로그래밍 언어 중 일부입니다.
이 튜토리얼에서는 Java 언어와 관련된 OOP의 기본 사항에 대해 설명합니다.
Java의 객체 지향 프로그래밍 (OOP)
Java는 현재 가장 많이 찾는 프로그래밍 기술입니다. Java에서는 모든 것이 객체를 기반으로합니다. Java에는 Java의 전체 기능이 파생 된 Object라는 루트 클래스가 있습니다. 따라서이 튜토리얼에서는 Java와 관련된 OOP의 주요 기능에 대해 설명합니다.
추천 자료 => OOP 인터뷰 질문 및 답변
여기서는 Java가 다음 OOP 기능을 지원하는 방법에 대해 설명합니다.
- 개체 및 클래스
- 수업
- 계승
- 다형성
- 추출
- 캡슐화
이러한 각 Java OOP 개념에 대해 자세히 설명하겠습니다.
개체 및 클래스
클래스는 디자인 프로토 타입 또는 청사진으로 정의 할 수 있습니다. 이러한 청사진에서 개체가 생성됩니다. 기본적으로이 공통 유형에 대해 이러한 속성에서 작동하는 속성과 메서드로 구성된 공통 유형을 정의합니다. 그런 다음 객체라는이 클래스의 인스턴스를 정의합니다.
다음 그림과 같이 클래스에는 많은 구성 요소가 있습니다.
개체는 실제 개체를 나타냅니다. Java에서 객체는 클래스의 인스턴스입니다. 따라서 청사진 인 클래스를 사용하여 많은 개체를 만들 수 있습니다. 이러한 개체는 종종 메서드를 통해 서로에게 메시지를 전달하여 서로 통신합니다.
비디오 자습서 : 클래스 및 개체
객체는 일반적으로 다음을 포함합니다.
- 상태 : 특정 시간에 개체의 속성 또는 속성입니다.
- 행동: 메서드는 개체의 동작을 나타냅니다. 메서드는 또한 개체가 통신하는 방법을 정의합니다.
- 정체: 고유 한 이름을 지정하여 개체를 식별합니다.
예를 들면 PetAnimals 클래스가 있으면
그런 다음이 클래스의 객체를 다음과 같이 정의 할 수 있습니다.
PetAnimals pig = 새로운 PetAnimals.
여기서 물체의 정체는 돼지입니다.
다음은 클래스와 객체를 보여주는 프로그램입니다.
//student class class Student{ int roll_No; String student_name; } class Main{ public static void main(String args()){ //Create objects of class Student Student student1=new Student(); Student student2=new Student(); //Initialize Student class objects student1.roll_No=101; student1.student_name='Lisa'; student2.roll_No=102; student2.student_name='Dan'; //Print object data System.out.println('Student 1 Details: ' + student1.roll_No+' '+student1.student_name); System.out.println('Student 2 Details: ' + student2.roll_No+' '+student2.student_name); } }
산출
위의 클래스에서 우리는 두 개의 속성 roll_No와 student_name을 가진 Student 클래스를 정의했습니다. 그런 다음 main 메소드에서 두 개의 클래스 객체, 즉 student1과 student2를 선언합니다. 이러한 개체는 new 연산자를 사용하여 생성됩니다. 객체가 생성되면 두 객체 속성에 데이터를 할당합니다.
마지막으로‘.’(점) 연산자를 사용하여 개체 내용을 인쇄합니다.
특정 OOP 자습서 항목에서 클래스 및 개체에 대해 자세히 알아 봅니다.
계승
상속은 OOP의 가장 중요한 특성 중 하나입니다. 상속을 통해 Java는 코드의 재사용을 촉진합니다.
그렇다면 Java에서 상속이란 무엇입니까?
상속은 한 클래스가 다른 클래스의 속성을 상속 할 수있는 Java의 메커니즘입니다. 상속 될 수있는 속성에는 클래스의 데이터 멤버와 메서드가 포함됩니다.
다른 클래스의 속성을 상속하는 클래스를 하위 클래스라고합니다. 상속 된 클래스는 Java에서 '수퍼'클래스로 알려져 있습니다.
클래스를 상속함으로써 서브 클래스는 속성을 상속 할뿐만 아니라 프로그래머가 상속을 사용하여 직접 상속 할 수있을 때 코드를 다시 작성할 필요가 없기 때문에 코드를 재사용합니다.
Java에서 상속은 'extends'키워드를 사용하여 수행됩니다. 이 extends 키워드는 클래스 정의에 사용되며 상속 될 클래스 이름이 뒤에옵니다.
예를 들면두 개의 클래스 A와 B가 있고 A가 B에 의해 상속되는 경우이 상속은 Java로 다음과 같이 작성됩니다.
class B extends A { …… }
이미 언급했듯이 여기서 A는 수퍼 클래스 또는 기본 클래스 또는 부모 클래스입니다. B는 하위 클래스, 파생 클래스 또는 자식 클래스입니다.
상속은 다음 유형으로 더 나뉩니다.
Java는 단일, 다중 레벨 및 계층 적 상속을 지원합니다.
Java는 다중 상속을 지원하지 않습니다. Java는 또한 다중 및 계층 적 상속의 조합 인 하이브리드 상속을 지원하지 않습니다.
다음은 Java에서 단일 상속의 예제 프로그램입니다.
//base class class Employee{ float salary=50000; } //derived class class Developer extends Employee{ int bonus=20000; } class Main{ public static void main(String args()){ //declare Developer class object and access properties of base and derived class Developer p=new Developer(); System.out.println('Inheritance in Java'); System.out.println('Developer salary: '+p.salary); System.out.println('Bonus declared for Developer: '+p.bonus); System.out.println('Developer Total Earnings: ' + (p.salary + p.bonus)); } }
산출
위 프로그램에는 기본 클래스 Employee가 있습니다. Employee 클래스에서 상속 된 다른 클래스 Developer가 있습니다. main 메서드에서 Developer 클래스의 객체를 선언하면 Developer 클래스의 속성뿐만 아니라 Developer 클래스에 상속 된 Employee 클래스의 속성에도 액세스 할 수 있음을 알 수 있습니다.
다형성
다형성은 OOP의 또 다른 중요한 기능입니다. 다형성은 객체 또는 엔티티가 여러 형태를 취하도록 허용하는 언어의 능력입니다. 예를 들면 다양한 구현이있는 메소드는 Java에서 다형성입니다.
다형성은 Java에서 두 가지 유형입니다.
- 오버로딩 또는 컴파일 시간 다형성 : 컴파일 타임 다형성에서 다형성 또는 오버로드 된 메서드에 대한 호출은 컴파일 타임에 해결됩니다.
- 재정의 또는 런타임 다형성 : 런타임 다형성에서 Java 프로그램의 재정의 된 메서드에 대한 호출은 런타임에 해결됩니다.
다음 튜토리얼에서 다형성에 대해 자세히 논의 할 것입니다.
다음은 Java에서 컴파일 타임 다형성의 예입니다. 여기서 우리는 다른 피연산자 유형으로 추가를 수행하기 위해 오버로드되는 메소드 add가 있습니다..
class Numbers_Sum { //add method : takes two int parameters public int add(int val1, int val2) { return (val1 + val2); } // overloaded add : takes three int parameters public int add(int val1, int val2, int val3) { return (val1 + val2 + val3); } //overloaded add: takes two double parameters public double add(double val1, double val2) { return (val1 + val2); } } class Main{ public static void main(String args()) { //create an object of Numbers_Sum class and call overloaded functions Numbers_Sum numsum = new Numbers_Sum(); System.out.println('Polymorphism in Java'); System.out.println('add(int, int): ' + numsum.add(15, 18)); System.out.println('add(int, int, int): ' + numsum.add(5, 10, 20)); System.out.println('add(double,double): ' + numsum.add(5.5, 15.5)); } }
산출
이 프로그램에는 add라는 세 가지 오버로드 된 메서드가 있습니다. 첫 번째 메서드는 두 개의 int 매개 변수를, 다음 메서드는 세 개의 int 매개 변수를, 세 번째 메서드는 두 개의 double 매개 변수를받습니다. 매개 변수의 수에 따라 메소드 호출은 컴파일 타임에 해결되고 적절한 호출이 이루어집니다.
추출
데이터 추상화를 사용하여 사용자가 액세스 할 수있는 애플리케이션의 필수 부분 만 노출합니다. 예를 들면 자동차가 있다면 자동차의 내부 구성 요소에 대해 걱정하지 않고 자동차 전체를 고려합니다.
데이터 추상화 메커니즘을 사용하여 필요한 세부 사항 만 식별하고 관련없는 세부 사항은 무시합니다. Java는 추상 클래스와 인터페이스를 사용하여 추상화를 수행합니다. 인터페이스는 정의가 아닌 메서드 프로토 타입 만 있으므로 100 % 추상적입니다.
아래 예제는 추상 클래스와 그 사용법을 보여줍니다.
// Abstract class declaration abstract class PetAnimal { // Abstract method: should be defined in derived class public abstract void animalSound(); // non-abstract method public void print() { System.out.println('This method is example of abstraction'); } } // Derived class class Dog extends PetAnimal { //abstract method defined here public void animalSound() { System.out.println('The doggy barks'); } } class Main { public static void main(String() args) { Dog doggy = new Dog(); // Instantiate derived class and call methods doggy.animalSound(); doggy.print(); } }
산출
위 프로그램에는 추상 클래스 PetAnimals가 있습니다. 여기에는 추상적 인 방법 인 'animalSound'가 있습니다. 그런 다음 Dog 클래스를 만들고 PetAnimals 클래스를 상속합니다. Dog 클래스에서 animalSound 메서드를 재정의합니다.
Eclipse의 junit 테스트 케이스 예제
캡슐화
캡슐화는 데이터를 숨기거나 데이터를 보호하는 것입니다. 프로그래밍에서 우리는 단일 단위로 데이터와 해당 데이터에서 작동하는 메서드를 래핑하여 캡슐화를 달성합니다.
비디오 자습서 : Java의 캡슐화 및 다형성
클래스는 캡슐화 단위로 볼 수 있습니다. 즉, 하나의 단일 단위에 번들로 제공되는 이러한 데이터 멤버에서 작동하는 데이터 멤버 및 메서드가 있습니다.
적절한 캡슐화는 데이터 멤버를 비공개로 만들고 이러한 데이터에서 작동하는 메서드를 공개로 설정하여 데이터가 외부 엔티티로부터 완전히 보호되도록 할 수 있습니다.
아래 Java 프로그램은 캡슐화 개념을 보여줍니다.
class Customer_Account { //private data of class private long customer_accountNo; private String customer_name,customer_email; private float customer_salary; //public getter/setter methods to access private data public long getAcc_no() { return customer_accountNo; } public void setAcc_no(long acc_no) { this.customer_accountNo = acc_no; } public String getName() { return customer_name; } public void setName(String name) { this.customer_name = name; } public String getEmail() { return customer_email; } public void setEmail(String email) { this.customer_email = email; } public float getSalary() { return customer_salary; } public void setSalary(float salary) { this.customer_salary = salary; } } public class Main { public static void main(String() args) { //create an object of customer_Account class Customer_Account acc=new Customer_Account(); //use setter methods to set values acc.setAcc_no(123458765432L); acc.setName('SoftwareTestingHelp'); acc.setEmail('sth@sth.com'); acc.setSalary(65000f); //use getter methods to read values System.out.println('Customer Account Number: ' + acc.getAcc_no()); System.out.println('Customer Account Details:'); System.out.println(' Customer Name: '+acc.getName()+'
'+ ' Customer Email: ' + acc.getEmail()+'
' + ' Customer Salary: ' +acc.getSalary()); } }
산출
위의 프로그램에는 Customer_Account 클래스가 있습니다.
이 클래스에는 모두 비공개 인 데이터 멤버가 있습니다. 그런 다음 각 private 필드에 대해 각각 값을 읽고 설정하는 getter 및 setter 메서드를 제공합니다. 이러한 getter 및 setter는 공개됩니다. 이렇게하면 클래스 외부에서 직접 액세스 할 수 없도록 데이터 필드를 보호합니다.
getter 및 setter를 통해서만 액세스 할 수 있습니다. 이것은 위에서 설명한 캡슐화를 보여줍니다.
자주 묻는 질문
Q # 1) 객체 지향 프로그래밍이란 무엇입니까?
대답: 객체 지향 프로그래밍 (OOP)은 데이터를 중심으로하는 소프트웨어 패러다임입니다. OOP에서는 데이터에 중점을 두므로 문제는 데이터 또는 필드로 구성된 개체 인 개체와 이러한 데이터 필드에서 작동하는 방법으로 표현됩니다.
이를 통해 Inheritance, Polymorphism, Abstraction 및 Encapsulation과 같은 OOP의 몇 가지 차별화 된 기능을 적용하여 데이터 안전성, 재사용 성 등을 보장합니다.
Q # 2) OOP의 4 가지 기본 원칙은 무엇입니까?
대답:객체 지향 프로그래밍 (OOP)에는 네 가지 기본 원칙이 있습니다.
- 계승
- 다형성
- 추출
- 캡슐화
OOP의 네 가지 기둥이라고도합니다.
Q # 3) Java를 Object-Oriented라고 부르는 이유는 무엇입니까?
대답: Java에는 Java의 다른 모든 기능을 파생시키는 루트 클래스 객체가 있습니다. 따라서 클래스와 객체가 없으면 Java 프로그램을 가질 수 없습니다. 따라서 Java는 OOP 언어라고합니다.
Q # 4) Java는 순전히 객체 지향입니까?
대답: 아니요, Java는 순수한 객체 지향 언어가 아닙니다. Java는 또한 int, char, float, double, long 등과 같은 원시 데이터 유형을 제공하므로 순수한 OOP 언어로 분류되지 않습니다.
Q # 5) C ++와 Java의 차이점은 무엇입니까?
대답: C ++와 Java는 모두 객체 지향 언어이며 OOP 기능을 지원합니다. 그러나 C ++는 컴파일 된 언어입니다. 반면에 Java는 해석 된 언어와 함께 컴파일됩니다.
Java 인터프리터는 런타임에 바이트 코드를 실행하고 플랫폼에 독립적 인 출력을 생성합니다. 그러나 C ++는 플랫폼에 따라 다릅니다.
OOPS 개념에 대한 추가 정보
수업
이 클래스는 실제 객체의 청사진 / 프로토 타입이며 실제 객체의 상태와 동작을 모델링합니다.
클래스 선언
class MyClass { // field, constructor, and // method declarations }
Class room(){ //room should have dimension. Dimension is attribute. //in the room, we are going keep things. Keeping is the function we are going to do. Keepthings (); this is a method in java. }
목적
소프트웨어 개체는 상태와 동작이있는 실제 개체와 같습니다. 상태는 필드로 저장되고 해당 동작을 메서드로 노출합니다.
여기 방은 일반적인 디자인과 같습니다. 이 방 안에는 거실, 조리실, 침실을 디자인해야합니다.
Class CookingRoom(){ Dimension is attribute. //here we should have method to keep cooking things. Keepthings(){ This method is same like room class keep things method. but it should have some more features to hold cooking items. } cooking(); }
Class LivingRoom(){ Dimension is attribute. //here we should have method to keep Living Room things. Keepthings(){ This method is same like room class keep things method. but it should have some more features to hold living room items(like tv etc). } watching tv(); }
여기서“Keepthings ()”메서드는 방에 필요한 기본 기능을 수행해야하며“거실”클래스 및“조리실”클래스 요구 사항에 따라 추가 사양이 있어야합니다. 따라서 두 클래스는 'room'클래스의 메서드를 상속해야합니다.
계승
다른 클래스에 상속 된 한 클래스의 동작 (메서드) 및 상태를 상속이라고합니다. 메서드와 상태는 부모 클래스에서 자식 클래스로 상속됩니다.
그래서,
Class CookingRoom extends Room{ }
Class LivingRoom extends Room{ }
다형성
생물학에서 다형성은 다양한 형태를 가질 수있는 향신료를 말합니다.
객체 지향 프로그래밍에서 동일한 개념으로 자식 클래스는 부모 클래스 메서드를 상속 할 수 있으며 해당 동작에 고유 한 기능을 추가 할 수도 있습니다. 다형성은 메서드 오버로딩 또는 재정의로 얻을 수 있습니다.
과부하
public class OverloadDemo { public int add( int a,int b) { int rs=a+b; return rs; } public int add( int a,int b,int c) { int rs=a+b+c; return rs; } public static void main(String() args) { OverloadDemo ov=new OverloadDemo(); System.out.println(ov.add(23,56,45)); System.out.println(ov.add(23,56)); } }
재정의
public class Bicycle { int wheels=2; String seat; public void riding() { System.out.println('bicycle is used for riding'); } }
public class RoadBicycle extends Bicycle{ public void riding() { System.out.println('RoadBicycle is used for road riding'); } }
public class TestBicycle { public static void main(String() args) { Bicycle b=new RoadBicycle(); b.riding(); } }
산출: 여기서 자식 클래스 메서드는 부모 클래스 메서드를 재정의합니다.
슈퍼 키워드
Super 키워드는 직계 부모 클래스 객체를 참조하는 데 사용되는 참조 변수입니다. super 키워드를 사용하면 부모 클래스 메서드 나 변수 또는 생성자를 참조 할 수 있습니다.
이 키워드
이 키워드는 현재 클래스 개체를 참조하는 데 사용됩니다. 이 키워드를 사용하면 현재 클래스 인스턴스 변수 또는 현재 클래스 메서드에 액세스 할 수 있습니다. 이것은 메소드 호출에서 인수로 전달 될 수 있습니다.
public class DemoThisKeyword { private int accno; private int balance; public void setvalues(int accno,int balance) { this.accno=accno; this.balance=balance; } public int showdata() { System.out.println(accno); System.out.println(balance); return balance; } public static void main(String() args) { // TODO Auto-generated method stub DemoThisKeyword obj =new DemoThisKeyword(); obj.setvalues(11, 100); obj.showdata(); System.out.println(obj.showdata()); } }
빌더
Java 생성자는 클래스에 대해 객체가 생성 될 때 호출되는 메소드와 같습니다. 생성자는 클래스와 이름이 같아야합니다.
Class Myclass{ Myclass(); Method1() { } }
클래스에 대한 개체를 만드는 동안 Myclass myobj = new Myclass ();
생성자 메서드가 호출됩니다. 생성자는 기본적으로 모든 클래스에 대해 Java 컴파일러에 의해 자동으로 생성됩니다.
public class ConstructorExampleProgram { int employee_age; String employee_name; int employee_salary; //Default constructor ConstructorExampleProgram(){ this.employee_name=Bob'; this.employee_age=30; this.employee_salary=7000; } //Parameterized constructor ConstructorExampleProgram(String n,int a,int b){ this.employee_name=n; this.employee_age=a; this.employee_salary=b; } public static void main(String args()){ ConstructorExampleProgram obj1 = new ConstructorExampleProgram(); ConstructorExampleProgram obj2 = new ConstructorExampleProgram('clare', 56,7500); System.out.println(obj1.employee_name+' '+obj1.employee_age+' '+obj1.employee_salary); System.out.println(obj2.employee_name+' '+obj2.employee_age+' '+obj2.employee_salary); } }
생성자에 대해 따라야 할 규칙 :
- 생성자는 클래스 이름과 동일한 이름을 가져야합니다.
- 생성자에는 return 문이 없어야합니다.
주목할 점 :
- 객체 지향 프로그래밍에서 객체는 프로그래밍의 주요 부분입니다.
- OOP 개념은 객체, 클래스, 상속, 다형성, 생성자입니다.
- 감독자 부모 클래스 멤버를 참조하는 데 사용되는 키워드 이 키워드는 현재 클래스 객체를 참조하는 데 사용됩니다.
- 생성자는 클래스에 대해 객체가 생성 될 때 호출되는 메서드와 같습니다.
결론
이 자습서에서는 Java에서 지원하는 중요한 객체 지향 기능의 기본 사항을 다룹니다. 이것은 Java의 OOPS에 대한 입문 자습서입니다. 이후 튜토리얼에서 모든 주제를 자세히 다룰 것입니다. Java는 OOP의 네 가지 기둥 즉, 다형성, 상속, 추상화 및 캡슐화를 지원합니다.
이러한 기능 외에도 Java는 포함, 집계, 메시지 전달 등과 같은 다른 기능과 OOP 구조도 지원합니다. 이는 다음 자습서에서 설명합니다.