Java 기초1

이수빈·2023년 7월 19일
0

JAVA

목록 보기
1/4
post-thumbnail

변수 및 개요

  • 모든 프로그램 소스는 Class단위로 시작함.

  • 소스 .java이고 => 컴파일 결과가 .class가 됨.

  • 여러 클래스로 구성되며, main() 메서드가 필요함.

  • 메인메서드는 프로그램의 진입점 => 클래스 인스턴스를 생성해서 사용함.

  • Main에서는 클래스 인스턴스를 생성하는 과정을 통해 사용함.


변수선언 => 접근제어자 타입 변수명

  • 자바는 명시적으로 타입을 지정해야함. => 원시형, 객체형존재

  • 원시형 8가지

    정수형 : byte, short, int, long (메모리 할당이 1,2,4,8바이트임)
    바이트형 => -128 ~ 127까지
    실수형 : float, double (4, 8 바이트) float는 소수 6째자리까지 표현함.
    문자형 : char (2바이트)
    논리형 : boolean (1바이트)

  • 변수선언만하는 방법, 선언과 초기화하는 방법 모두 가능(후자 권장)

  • 상수 => final 키워드를 이용해 선언함.(선언과 초기화 동시에 해야함 + 대문자로)

  • 리터럴 => 값을 가르키는 용어

  • 객체형은 참조변수이고, 클래스부에 선언된 변수는 필드 혹은 멤버변수라고함.

Int num1= 10;// 원시자료형 정수 타입
String msg="Hello";// 객체타입 문자열 타입
Member member=new Member();// 객체타입 Member 클래스 타입
  • 멤버변수 => 클래스변수(static) , 인스턴스변수 존재!

메서드

  • 형식 [접근제어자] 리턴타입 메서드명

  • 없는경우도 void 사용함.

  • 메서드 오버로딩 => 동일이름으로 리턴값이나, 인자가 다른 여러 메서드 선언

  • 가변인자 => String ...msg 처럼 사용

  • 생성자 메서드
    => 인스턴스 초기화작업수행 (아무것도 없는듯)
    => 생성자 함수의 이름은 클래스와 동일해야함, 인자값에 따라 메서드 오버로딩 가능함.


자바 프로그램 실행과정

  • 컴파일러에 의해 변환된 코드가 => JVM에 의해 실행됨 => JVM을통해 OS가 다른경우에도 모든 운영체제에서 사용가능, 운영체제에 맞는 JVM 버전을 설치해야함. (속도가 좀 느리다)

  • 프로그램이 실행되면 => main을 찾아 모든 명령문을 수행함. => 반드시 하나는 존재해야하는데, 여러 개가 존재한다면?

  • Public static void으로 선언되어야함.

JAVA 8 변경점

  • 람다표현식 => 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용 할 수 있음.
    (함수형 프로그래밍 => 파라미터나 메소드의 결과값으로 반환 가능함.)
new Thread(new Runnable() {
    public void run() {
        System.out.println("전통적인 방식의 일회용 스레드 생성");
    }
}).start();
 
new Thread(()->{
    System.out.println("람다 표현식을 사용한 일회용 스레드 생성");
}).start();

출처: http://www.tcpschool.com/java/java_intro_java8

  • STREAM API => 많은양의 데이터를 저장하기 위해서는 배열이나 COLLECTION을 사용했다.

=> 문제점 : 시간복잡도가 안좋고, 반복문과 이터레이터를 사용해 코드를 작성해야했다.

String[] arr = new String[]{"넷", "둘", "셋", "하나"};
 
// 배열에서 스트림 생성
Stream<String> stream1 = Arrays.stream(arr);
stream1.forEach(e -> System.out.print(e + " "));
System.out.println();
 
// 배열의 특정 부분만을 이용한 스트림 생성
Stream<String> stream2 = Arrays.stream(arr, 1, 3);
stream2.forEach(e -> System.out.print(e + " "));

출처: http://www.tcpschool.com/java/java_intro_java8

타입변환,메모리구조

타입변환

  • Boolean형을 제외한 나머지 기본 타입간의 변환을 자유롭게 수행 할 수 있다.
    => 암묵적 타입변환(자동타입변환), 명시적 타입변환이 존재함.

Ex) double num1 = 10; => int형 데이터가 double로 타입변환됨. Ok

int num2 = 3.14; => 데이터 손실, int형 데이터는 소수점을 표현하지 못함
삼항연산자, instanceof 연산자

  • Instanceof => 참조변수가 참조하고 있는 인스턴스의 실제 타입을 반환함.

  • 형식:인스턴스이름 instanceof 클래스또는인터페이스이름

메모리구조

  • 메소드영역 => 클래스에 대한 정보와 클래스 변수가 저장됨.
    JVM은 클래스가 사용되면 => 해당 .class 파일을 읽어들여 클래스에 대한 정보를 메소드 영역에 저장함.

  • 힙영역 => 인스턴스 변수가 저장됨

  • 스택영역 => 메소드 스택프레임이 저장됨.

  • 스택프레임

    메소드가 호출되면, 메소드의 호출과 관계되는 지역 변수와 매개변수를 스택 영역에 저장합니다.
    이렇게 스택 영역은 메소드의 호출과 함께 할당되며, 메소드의 호출이 완료되면 소멸합니다.
    이렇게 스택 영역에 저장되는 메소드의 호출 정보를 스택프레임이라고 합니다.

ref) http://www.tcpschool.com/java/java_array_oneDimensional 1~22 sector

profile
응애 나 애기 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

아주 잘 작성된 글이었습니다.

답글 달기