👀 인스턴스란?
클래스(class)에서 정의된 틀을 바탕으로 실제로 메모리 상에 할당되어 생성된 것
public class Car {
private static int count; // 클래스 변수
private String name; // 인스턴스 변수
public Car(String name) {
this.name = name;
count++; // 클래스 변수 값 증가
}
public static int getCount() { // 클래스 메소드
return count;
}
public String getName() { // 인스턴스 메소드
return name;
}
}
public class MyClass {
public MyClass() { // 생성자
// 객체 초기화 코드
}
}
public class MyClass {
public void myMethod() { // 메소드
// 메소드 코드
}
}
접근제어자 [static] 반환타입 메소드이름([매개변수1, 매개변수2...내가원하는 만큼]){
메소드이름이 호출되면 실행할 문장;
...
[return 반환값]
}
👀 인자(argument)란?
함수나 메서드를 호출할 때 함수나 메서드에 전달되는 값
👀 접근 제한자(access modifier)란?
클래스의 멤버(변수, 메소드)에 대한 접근을 제한하는 키워드
👀 캡슐화(encapsulation)
- 객체 지향 프로그래밍에서 객체의 데이터와 기능을 하나로 묶고, 외부에서 직접 접근하지 못하도록 정보를 은닉하는 것
- 객체의 내부 구조를 외부에서 직접적으로 접근할 수 없도록 제한하는 것
자바에서는 private 접근 제한자를 이용하여 멤버 변수를 캡슐화할 수 있다.
Java에서는 클래스와 객체를 따로 생성한다. 클래스를 먼저 정의하고, 객체를 생성하여 사용한다. 반면, Python에서는 클래스와 객체를 한꺼번에 생성한다. 클래스를 정의하는 것만으로 객체도 생성된다.
public class MyClass {
int x = 5;
}
public class Main {
public static void main(String[] args) {
MyClass myObj = new MyClass();
System.out.println(myObj.x);
}
}
class MyClass:
x = 5
myObj = MyClass()
print(myObj.x)
Java에서는 클래스 내부의 멤버 변수를 명시적으로 선언해야 한다. 멤버 변수에 대한 접근은 getter/setter 메서드를 통해 이루어진다. 반면, Python에서는 멤버 변수를 클래스 내에서 선언하지 않고, 객체의 인스턴스 변수로 동적으로 추가할 수 있다. 그리고 멤버 변수에 직접 접근이 가능하다.
public class MyClass {
private int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
public class Main {
public static void main(String[] args) {
MyClass myObj = new MyClass();
myObj.setX(5);
System.out.println(myObj.getX());
}
}
class MyClass:
pass
myObj = MyClass()
myObj.x = 5
print(myObj.x)
Java에서는 메서드를 선언할 때 반환 값의 데이터 타입과 파라미터의 데이터 타입을 명시해야 한다. 반면, Python에서는 반환 값의 데이터 타입과 파라미터의 데이터 타입을 명시하지 않는다.
public class MyClass {
public int sum(int a, int b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
MyClass myObj = new MyClass();
System.out.println(myObj.sum(5, 3));
}
}
Java에서는 클래스 상속을 명시적으로 선언해야 한다. 반면, Python에서는 클래스 선언 시 상속 받을 클래스를 지정할 수 있다.
public class Animal {
String name;
int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void move() {
System.out.println("The animal is moving.");
}
}
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
@Override
public void move() {
System.out.println("The dog is running.");
}
public void bark() {
System.out.println("Woof!");
}
}
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def move(self):
print("The animal is moving.")
class Dog(Animal):
def __init__(self, name, age):
super().__init__(name, age)
def move(self):
print("The dog is running.")
def bark(self):
print("Woof!")