JAVA TIL(4)

30440 단어 TILJavaJava

📚 하루에 한번씩 배운 것과 지식을 정리하려고 쓰는 글

📗 Java 객체

📌 static

보통 변수의 static 키워드는 프로그래밍 시 메모리의 효율보다는 공유하기 위한 용도로 훨씬 더 많이 사용하게 된다.

📌 데이터 은닉(getter, setter)

//Student Class
private String name;
private int score;

public Student(String n, int s) {
 this.name = n;
 this.score = s;
}

public void getInfo() {
System.out.println(" -- getInfo() --");
System.out.println(" name :" + name);
System.out.println(" score :" + score);
}

public String getName() {
	return name;
}
public int getScore() {
	return score;
}
public void setScore(int score) {
	if(score > 50) this.score = score;
}

//MainClass
{
Student student1 = new Student("홍길동", 90);
student1.getInfo();

student1.setScore(100);
student1.getInfo();
}

결과

---getInfo()---
name : 홍길동
score : 90
---getInfo()---
name : 홍길동
score : 100

📗 Java 상속 및 클래스

📌 상속이란?

부모 클래스를 상속받은 자식 클래스는 부모 클래스의 속성과 기능도 이용할 수 있다.

  • 상속의 필요성 : 기존의 검증된 class를 이용해서 빠르고 쉽게 새로운 class를 만들 수 있다.
  • extends 키워드를 이용해서 상속을 구현
  • java는 단일 상속 (하나의 클라스만 상속할 수 있다)

부모 클래스의 private 접근자

: 자식 클래스는 부모 클래스의 모든 자원을 사용할 수 있지만, private 접근자의 속성과 메서드는 사용할 수 없다.

📌 상속의 특징

(1) 메서드 오버라이드 (override)

: 부모 클래스의 기능을 자식 클래스에서 재정의해서 사용한다.

public class ParentClass {

	public void makeJJajang() {
    		System.out.println(" -- makeJJajang() START --");
    	}	
  }
  
public class ChildClass extends ParentClass {
	
    	@Override
	public void makeJJajang() {
    		System.out.println(" -- more delicious makeJJajang() START --");
    	}	
  }
  
ChildClass child = new ChildClass();
child.makeJJajang();

// 결과
// -- more delicious makeJJajang()

(2) 자료형(타입)
: 기본 자료형처럼 클래스도 자료형이다.

(3) Object클래스
: 모든 클래스의 최상위 클래스는 Object Class이다.

(4) super 클래스
: 상위 클래스를 호출할 때 super 키워드를 이용한다.

public class ParentClass {
	int openYear = 1995;
    
	public void makeJJajang() {
    	    System.out.println(" -- makeJJajang() START --");
    	}	
  }
  
public class ChildClass extends ParentClass {
	int openYear = 2000;
    
	public void getOpenYear() {
    	    System.out.println("ChildClass's Open year : " + this.openYear);
            System.out.println("ParentClass's Open year : " + super.openYear);
  }
  
ChildClass c = new ChildClass();
c.getOpenYear();

// 결과
// ChildClass's Open year : 2000
// ParentClass's Open year : 1995

📌 익명 클래스

: 이름이 없는 클래스로 주로 메서드를 재정의 하는 목적으로 사용된다.
익명 클래스는 인터페이스나 추상클래스에서 주로 이용된다.

public class AnonymousClass {
	public AnonymousClass() {
    	    System.out.println("AnonymousClass constructor"); 
        }
        
    	public void method() {
            System.out.println(" -- AnonymousClass's method START == ");
        }
 }
      
// Main Class
new AnonymousClass() {

    @Override
    public void method() {
      System.out.println(" -- AnonymousClass's Override method START -- ");
    };
}.method();

// 결과
// -- AnonymousClass's Override method START --

📌 인터페이스

인터페이스란 ?

클래스와 달리 객체를 생성할 수는 없으며, 클래스에서 구현해야 하는 작업 명세서이다.

- 인터페이스를 사용하는 이유

: 인터페이스를 사용하는 이유는 많지만, 가장 큰 이유는 객체가 다양한 자료형(타입)을 가질 수 있기 때문이다.

- 인터페이스 구현

: class 대신 interface 키워드를 사용하며, extend 대신 implements 키워드를 이용한다.

// InterfaceA
public interface InterfaceA {
    public void funA();
}

//InterfaceB
public interface InterfaceB {
    public void funB();
}

//ImplementClass
public class ImplementClass implements InterfaceA, InterfaceB {

    @Override
    public void funA() { System.out.println("-- funA --"); }
    public void funB() { System.out.println("-- funB --"); }
}

- 장난감 인터페이스

: interface를 이용하면 객체가 다양한 자료형(타입)을 가질 수 있다.

Toy robot = new ToyRobot();
Toy airplane = new ToyAirplane();

Toy toys[] = {robot, airplane};

for (int i = 0; i < toys.length; i++) {
   toys[i].walk();
   toys[i].run();
   toys[i].alarm();
   toys[i].light();
   
   System.out.println();
}

//결과
The robot can walk.
The robot can run.
The robot has no alarm function.
The robot has light function.

The airplane can not walk.
The airplane can not run.
The airplane has alarm function.
The airplane has no light function.

📌 추상클래스

추상클래스란?

: 클래스의 공통된 부분을 뽑아서 별도의 클래스(추상클래스)로 만들어놓고, 이것을 상속해서 사용한다.

- abstract 클래스의 특징

  • 멤버변수를 가진다.
  • abstract 클래스를 상속하기 위해서는 extends를 이용한다.
  • abstract 메서드를 가지며, 상속한 클래스에서 반드시 구현해야한다.
  • 일반 메서드도 가질 수 있다.
  • 일반 클래스와 마찬가지로 생성자도 있다.

📌 인터페이스 vs 추상클래스

[ 공통점 ]

(1) 추상 메서드를 가진다.
(2) 객체 생성이 불가하며 자료형(타입)으로 사용된다.

[ 차이점 ]

- 인터페이스
: 상수, 추상메서드만 가진다.
: 추상 메서드를 구현만 하도로고 한다.
: 다형성을 지원한다.

- 추상클래스
: 클래스가 가지는 모든 속성과 기능을 가진다.
: 추상 메서드 구현 및 상속의 기능을 가진다.
: 단일 상속만 지원한다.


📌 람다식

람다식이란?
: 익명 함수를 이용해서 익명 객체를 생성하기 위한 식

- 람다식 구현

public interface LambdaInterface1 {
   public void method(String s1, String s2, String s3);
}

//Main Class
LambdaInterface1 li1 = (String s1, String s2, String s3) -> { System.out.println(s1 + " " + s2 + " " + s3); };
li1.method("Hello", "java", "World");

// 매개변수가 1개이거나 타입이 같을 때, 타입을 생략할 수 있다.
LambdaInterface2 li2 = (s1) -> { System.out.println(s1); };
li2.method("Hello");

// 실행문이 1개일 때, '{}'를 생략할 수 있다.
LambdaInterface3 li3 = (s1) -> System.out.println(s1);
li3.method("Hello");

// 매개변수와 실행문이 1개일 때, '()'와 '{}'를 생략할 수 있다.
LambdaInterface3 li4 = s1 -> System.out.println(s1);
li4.method("Hello");

// 매개변수가 없을 때, '()'만 작성한다.
LambdaInterface3 li5 = () -> System.out.println("no param");
li5.method();

📌 문자열 클래스

문자열을 다루는 String 클래스(객체)는 데이터가 변하면 메모리상의 변화가 많아 속도가 느리다.

StringBuffer, StringBuilder

: String 클래스의 단점을 보완한 클래스로 데이터가 변경되면 메모리에서 기존 객체를 재활용한다.

StringBuffer sf = new StringBuffer("JAVA");
sf.append("_8");
  • 문자열이 변경되면 기존의 객체를 재활용한다.
  • 속도는 StringBuilder가 조금 더 빠르며, 데이터 안정성은 StringBuffer가 조금 더 좋다.

📌 Collections

📎 List
: List는 인터페이스로 이를 구현한 클래스는 인덱스를 이용해서 데이터를 관리한다.

📎 Map
: Map은 인터페이스로 이를 구현한 클래스는 key를 이용해서 데이터를 관리한다.

좋은 웹페이지 즐겨찾기