익명클래스(Anonymous Class)

위에서 익명 클래스에 대한 말이 나오는데 어떤의미인지에 대해 살펴보자 .

클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한 번만 사용될수 있고, 오직 하나의 객체만을 생성할 수 있는 일회용 클래스.

  • 이름이 없기 때문에 생성자를 가질수 없다.
  • 단 하나의 클래스를 상속받거나 단하나의 인터페이스만을 구현 할 수 있다.
  • 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘이상의 인터페이스를 구현할 수 없다.

추상클래스 action

package anonymousclass;

public abstract class Action{
    public abstract void exec();
}

MyAction 클래스

package anonymousclass;

public class MyAction extends Action {
    @Override
    public void exec() {
        System.out.println("exec");
    }
}

MainClass

package anonymousclass;

public class ActionExam {
    public static void main(String[] args) {

        //1. 추상 클래스 사용
        Action action = new MyAction();
        action.exec();

        //2. Anonymous Class
        Action anonymousAction = new Action(){
            @Override
            public void exec() {
                System.out.println("exec");
            }
        };
        //action을 상속받는 클래스를 만들 필요가 없는 경우
        //action을 상속받는 클래스가 해당 클래스에서만 사용되고 다른 클래스에서는 사용되지 않는 경우
        action.exec();
    }
}

추상클래스를 상속받아서 추상클래스의 매소드를 사용할수 있지만, 만일 해당 클레스에서만 활용되고 다른 클래스에서 사용되지 않는 경우에는 2번과 같은 Anonymous 클래스를 사용한다.

추상클래스,인터페이스 는 원래 상속을 받아야만 사용이 가능하지만, 익명 클래스에서는 위와 같이 사용 할 수 있다.

잘못된 부분이 있으면 알려주세요~

참고 : https://programmers.co.kr/learn/courses/5/lessons/243

'ProgramLanguage > Java' 카테고리의 다른 글

Java 와 객체 지향  (0) 2019.12.03
Java jar파일 만들기  (0) 2019.08.04
인터페이스와 추상클래스  (0) 2019.06.10
람다 식 Lambda Expression (1)  (0) 2019.06.09
Java OutOfMemoryError  (0) 2017.12.18

Intellij Java Compile Error

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
        System.out.println("hello~ Java");
    }
}

컴파일을 하니 아래와 같은오류가 났다 .왜일까 ??

Error:java: invalid source release: 11

Command + ; + (+) 를 누르고 프로젝트의 structure를 들어가면 project language leveldl 11로 되어있는것을 알수 있다.

에러 내용의 source release 11은 프로젝트의 언어 레벨에 대한 설정을 나타내고 있었다.

우리는 java8을 쓰기 때문에 11- local variable syntax for lambda parameters 를 java8로 변경해준다

그럼 제대로 실행된다.

'ProgramLanguage' 카테고리의 다른 글

Thread  (0) 2017.12.18

스트레티지 패턴

  • 전략 패턴은 각각의 알고리즘 군을 교환이 가능하도록 별도로 정의하고 각각 캡슐화 한 후 서로 교환해서 사용 할 수 있는 패턴,
  • 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환가능 하도록 하는 패턴

인터페이스

  • 기능에 대한 선언과 구현 분리
  • 기능을 사용 통로

장점

  • 코드 중복 방지
  • 런타임 시에 타겟 메소드 변경
  • 확장성 (신규클래스) 및 알고리즘 변경 용이

프로젝트 전체에서 변경이 일어나지 않는 부분에서 변경이 일어나는 부분을 찾아서 따로 캡슐화 한다.

package stragegy;

public interface CarMoveBehavior {
  public void action();
}



class UpBehavior implements CarMoveBehavior{
  @Override public void action(){
    System.out.println("up!");
  }
}

class DownBehavior implements CarMoveBehavior{
  @Override public void action(){
    System.out.println("Down!");
  }
}

class LeftBehavior implements CarMoveBehavior{
  @Override public void action(){
    System.out.println("Left!");
  }
}

class RightBehavior implements CarMoveBehavior{
  @Override public void action(){
    System.out.println("Right!");
  }
}



public class Car {
    private CarMoveBehavior carMoveBehavior;

  public Car(CarMoveBehavior carMoveBehavior){
    this.carMoveBehavior = carMoveBehavior;
  }
  public void move(){
    carMoveBehavior.action();
  }

  public void setMoveBehavior(CarMoveBehavior carMoveBehavior){
    this.carMoveBehavior = carMoveBehavior;
  }
}

Main.java

public class Main{
  public static void main(String[] args){

    Car car1 = new Car(new UpBehavior());
    car1.move();

    Car car2 = new Car( new DownBehavior());
    car2.move();

    Car car3 = new Car( new LeftBehavior());
    car3.move();

    Car car4 = new Car( new RightBehavior());
    car4.move();
  }
}

인터페이스라는 공통적인 기능들을 선언해두고 그것들을 캡슐화하여 인터페이스의 기능을 구현하는 방법 !!

참고 : https://niceman.tistory.com/133?category=940951

참고 : https://www.youtube.com/watch?v=UEjsbd3IZvA&list=PLsoscMhnRc7pPsRHmgN4M8tqUdWZzkpxY&index=2&t=0s

쓰레드 (Thread)

 

쓰레드는 Thread Id, 프로그래밍 카운터, 레지스터 집합, 스택으로 구성됨

→프로그래밍 카운터란 : 중웅처리장치내부에 있는 레지스터중 하나, 다음에 실행될 명령어의 주소를 가지고있어 명령어 포인터라고도함 .

쓰레드는 같은 프로세스에 속한 다른 쓰레드와 코드, 데이터, 그리고 파일이나 신호와 같은 운영체제 자원들을 공유한다.

단일 쓰레드 : 하나의 쓰레드 즉, 레지스터와 스택으로 표현

다중 쓰레드 : 각각의 쓰레드와 고유의 레지스터 , 스택으로 표현

 

 

다중 쓰레드의 장점 4가지

  1. 응답성(Responsiveness) :
  2. 자원 공유(Resource sharing) : 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유
  3. 경제성(Economy) : 프로세스 생성을 위해 메모리와 자원을 할당 하는 것은 비용이 많이 든다. 쓰레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 쓰레드를 생성하고 문맥교환(Context Switching)하는 것이 더 경제적.
  4. 다중 처리기 구조의 활용 (Scalability) : 다중 쓰레드의 이점은 다중 처리기 구조에서 더욱 증가할수있다. 다중 처리기 구조에서는 각각의 쓰레드가 다른처리기에서 병렬로 수행될 수 있기 때문.

사용자 쓰레드 : 커널 위에서 지원되며 사용자 수준의 쓸데ㅡ 라이브러리에서 구현 , 커널 지원없이 쓰레드의 생성과 스케줄링 관리 지원

커널 쓰레두 : 쓰레드의 생성과 스케줄링 관리가 커널에 의해서 커널 공간에 행해진다.

'ProgramLanguage' 카테고리의 다른 글

인텔리제이 java compile 오류 해결하기  (2) 2019.06.07

자바 heap 메모리 오류 났을떄

처음에는 자바 heap 메모리 가 너무 적어서 일어나는 줄 알고 heap메모리를 늘려도 보고

Heap 메모리를 처리하는 JVM 문제인것같아서 찾아보고 했는데 해답은

간단한 곳에 있었다.

다음의 관련된 오류를 보면 StringBuilder에서 문제가 생겼다는 것을 유추하여

 

그부분을 다시 찾아보니 문자열을 전처리 할 때

제대로 처리가 되지않아 String 부분에서 메모리가 계속 쌓였던 것이다.

 

아래는 나의 소스와는 관련이 없지만 참고할만한 자료이다.

String 오류 를 찾아냄

http://dgdg.tistory.com/entry/String-appending%EC%97%90%EC%84%9C-operator%EC%99%80-StringBufferappend%EC%9D%98-%EC%B0%A8%EC%9D%B4

'ProgramLanguage > Java' 카테고리의 다른 글

Java 와 객체 지향  (0) 2019.12.03
Java jar파일 만들기  (0) 2019.08.04
인터페이스와 추상클래스  (0) 2019.06.10
람다 식 Lambda Expression (1)  (0) 2019.06.09
익명클래스(Anonymous Class)  (0) 2019.06.08

+ Recent posts