본문 바로가기

플밍 is 뭔들/JAVA

[자바] 자바 리플렉션 (Java Reflection) ※ 정의 - 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API ※ 어떻게 가능할까? - 자바 클래스 파일은 바이트 코드로 컴파일되어 Static 영역에 위치하게 된다. 그렇기 때문에 클래스의 이름만 알고 있으면 이 영역을 뒤져서 클래스에 대한 정보를 가져올 수 있다. 가저올 수 있는 정보 목록 ClassName Class Modifiers(public, private, synchronized 등) Package Info SuperClass Implemented Interface Constructors MethodsFields Annotations ※ 리플렉션 사용 예1 (클래스에서 메서드 찾기) public class Main { public.. 더보기
[자바] 네트워킹 (Networking) ※ 네트워킹이란? 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것. 컴퓨터들을 서로 연결하여 데이터를 손쉽게 주고받거나 또는 자원(프린터와 같은 주변기기)을 함께 공유하고자 하는 노력에서 시작됨. 자바에서 제공하는 java.net 패키지를 사용하면 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있으며, 간단한 네트워크 어플리케이션은 단 몇 줄의 자바코드 만으로도 작성이 가능. ※ 클라이언트/서버 (client/server) 클라이언트 : 서비스를 사용하는 컴퓨터 서버 : 서비스를 제공하는 컴퓨터 ※ 서비스 서버가 클라이언트로부터 요청받은 작업을 처리하여 그 결과를 제공하는 것. ex) 파일 서버, 메일 서버, 어플리케이션 서버 등등 ※ 서버기반 모델 / p2p 모델 서버기반 .. 더보기
[자바] 쓰레드(thread) ※ 프로세스와 쓰레드 프로세스(process) - 실행 중인 프로그램 (프로세스는 데이터, 메모리 등의 자원과 쓰레드로 구성되어있음) 쓰레드(thread) - 프로세스의 실제 작업을 수행하는 것 프로세스가 가질 수 있는 쓰레드의 양은 정해져 있지 않으나 쓰레드가 작업을 수행하는데 개별적인 메모리공간(호출스택)을 필요로 하기 때문에 프로세스의 메모리의 한계에 따라 생성할 수 있는 쓰레드가 결정된다. ※ 멀티쓰레드 멀티쓰레딩은 한개의 프로세스 안에서 여러개의 쓰레드가 동시에 작업을 수행하는 것이 가능하다. 실제로 CPU는 한가지 작업밖에 하지 못하지만 아주 짧은 시간 동안에 여러 작업을 번갈아 수행하가며 동시에 여러 작업이 수행되는 것처럼 보이게 하는 것이다. 그렇기 때문에 쓰레드가 많다고 프로세스가 빨라지.. 더보기
[자바] 인터페이스와 상속의 비교 및 정리 ※ extends와 implements의 차이 - extends 상속을 뜻한다. 사전적 의미로는 확장,확대의 뜻을 가지고 있다. 코딩으로 치면 조상의 멤버(메서드, 변수 등)를 자식에서 그대로 물려받아 추가적으로 자식의 멤버를 추가, 즉 조상의 멤버를 물려받고 자식에서 거기에 추가로 확장하여 사용하는 의미로 보면 적당할 것 같다. 따라서 자식으로 내려갈 수록 조상보다 멤버의 범위가 더 넓다. 클래스끼리는 하나의 클래스만 상속만 된다. public class Ambulance extends Car{} 인터페이스끼리는 다중 상속이 가능하다. 이렇게 여러개의 인터페이스를 상속받은 인터페이스를 클래스에 적용할 땐 모든 메서드를 구현해 줘야한다. interface InterfaceTest1 { public fin.. 더보기
[자바] 예외처리 (Exception) ※ 에러의 종류 - 컴파일 에러 : 컴파일 도중에 생기는 에러 (소스코드에 대한 오타, 잘못된 구문, 자료형 체크 등등) - 런타임 에러 : 실행 도중 생기는 에러 (컴파일 완료 후 시스템 실행시 생기는 에러) ※ 자바에서 예외처리 자바에서는 실행 시 발생할 수 있는 오류를 에러와 예외 두가지로 구분한다. 에러 - 메모리부족, 스택오버플로우등 발생하면 복구할 수 없는 심각한 오류 예외 - 발생하더라도 수습이 될 수 있는 비교적 덜 심각한 것 에러가 발생하면 프로그램의 비정상적인 종료를 막을 순 없지만 예외가 발생하면 프로그래머가 적잘한 코드를 미리 작성해 놓으면 프로그램의 비정상적인 종료를 막을 수 있다. ※ 예외처리의 정의와 목적 정의 - 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 .. 더보기
[자바] 인터페이스 (Interface) ※ 인터페이스란? 일종의 추상클래스로써 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 인터페이스에는 오직 추상메서드와 상수만을 가진다. 추상클래스 : 부분적으로만 미완성이 되어있는 설계도 인터페이스 : 구현은 아무것도 되어있지 않고 밑그림만 그려져 있는 설계도 ※ 인터페이스 작성 interface InterfaceTest { public static final int a =0; public void method1(); } 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다. 모든 메서드는 public abstract 이어야 하며 이를 생략할 수 있다.. 더보기
[자바] 추상클래스 (Abstract Class) ※ 추상클래스란? 추상 메서드를 포함하고 있는 클래스. 추상 클래스는 미완의 추상 메서드가 있는 클래스로써 추상클래스는 상속을 통해서 자손 클래스에서 구현이된다. ex) abstract class Car { //추상클래스 public void drive(){ System.out.println("출발합니다. 부릉부릉"); } public void stop(){ System.out.println("멈춥니다. 끼이익"); } public abstract void abstractTest(); //추상메서드 } public class FireEngin extends Car{ //추상클래스인 Car를 상속받음 public void water(){ System.out.println("물을뿌립니다. 쉬이이이익"); }.. 더보기
[자바] 다형성 (Polymorphism) ※ 다형성 다형성이란 '여러 가지 형태를 가질 수 있는 능력'으로써 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 함. ex) class Parent{ int num1; int num2; void parnetMethod(){ ... } } class Child{ String str; void childMethod(){ ... } } public static void main(String[] args){ Parent p = new Child(); //이런 형태가 가능하다. Child c = new Child(); } 위에서 보다시피 Parent p = new Child()와 같.. 더보기
[자바] 제어자(Modifier) ※ 제어자란? 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다. ※ static '클래스의' 또는 '공통적인'의 의미를 담고있다. 멤버변수, 메서드, 초기화 블럭에 사용 가능하다. 멤버변수에서 사용될 때 - 클래스 안에서 맴버변수에 사용되면 클래스 변수로써 인스턴스와 상관없이 같은 값을 갖게 된다. 메서드에서 사용될 때 - 메서드에서 사용되면 인스턴스를 생성하지 않고도 호출이 가능한 메서드가 된다. 이 static메서드 내에는 인스턴스멤버들을 직접 사용할 수 없다. 인스턴스 멤버를 사용하지 않는 메서드는 static을 붙여서 static을 붙여서 static메서드로 선언하는 것을 고려해 보도록 하자. 가능하.. 더보기
[자바] 상속 ※ 상속이란 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것 ※ 상속방법 class Child extends Parent{ ... } ※ 상속의 특징 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. 자손 클래스의 개수는 조상 클래스보다 항상 같거나 많다. 자손 클래스는 부모클래스의 기능 및 변수 + 자손 클래스의 기능 및 변수 이므로 부모클래스를 포함하는 범위에 속한다. ※ 상속 예시 public class Animal { int age; public Animal(){ this(7); } public Animal(int age){ this.age = age; } public void eat(){ System.out.println("[Animal 클래스] 먹는다. 냠냠"); } } publ.. 더보기
[자바] 오버로딩 / 오버라이딩 ※ 오버로딩이란? 메서드 이름이 같더라도 매개변수에 따라 하나의 메서드 이름으로 여러 기능을 구현할 수 있는 기능이다. ex) void println() void println(boolean x) void println(char x) void println(int x) void println(String x) .... 위와 같이 메서드들이 같은 이름을 갖고 있지만 매개변수가 다르다. 이 메서드만큼 새로운 이름을 지으려면 이름을 짓기도 어렵고 사용하는 사람도 기억하기 부담스럽다. 하지만 오버로딩을 통해 하나의 메서드 이름으로 정의될 수 있다. ※ 오버로딩의 조건 - 메서드 이름이 같아야 한다. - 매개변수의 개수 또는 타입이 달라야 한다. - 리턴타입은 오버로딩을 구현하는데 영향을 주지 않는다. 즉 리턴타.. 더보기
[자바] 클래스 ※ 클래스란? 객체지향 프로그래밍에서 로직과 데이터를 묶어놓은 하나의 단위 혹은 객체를 정의해놓은 것으로써 객체를 생성하는데 사용된다. ※ 클래스와 객체 위에서 말했듯 클래스는 객체를 생성할 때 사용된다. 가장 흔하게 사용되는 비유가 붕어빵과 붕어빵틀로 비유한다. 클래스는 붕어빵을 만드는 틀이고 그 틀에서 만들어진 붕어빵은 객체라고 한다. 아래 직접 코드로 예를 들어보자. ex) Cat yaOngE = new Cat(); Cat navi = new Cat(); Cat nyan = new Cat(); ... Cat이라는 클래스에 고양이에 관한 데이터, 메서드 들이 정의되어 있다. 이러한 클래스를 이용하여 세개의 고양이 객체(야옹이,나비,냥)를 만들었다. 즉 Cat이라는 클래스 안에 고양이에 대한 로직 데이.. 더보기