2020년 9월 18일 금요일

(자바강의/자바강좌/자바동영상/자바/JAVA)자바 배열(Java Array),자바교육추천,자바강의추천

 


(자바강의/자바강좌/자바동영상/자바/JAVA)자바 배열(Java Array) 

 

1. 자바 배열

하나의 배열변수에 동일한 타입의 여러 값을 저장한다.

선언을 위해 대괄호로 변수의 타입을 지정한다.

원시 데이터 유형(int, long) 외에도 배열은 참조 유형(타입이 클래스 인것, 객체)을 저장한다.

배열도 객체, Heap에 메모리가 할당된다.

배열 선언(주의 : 선언 할때 크기 명시 안 한다.)

int[] a; (혹은 int a[];)

배열에 Access하기 위한 첨자는 int형, long인 경우엔 캐스팅을 해야 한다.

배열 생성

a = new int[3];

int[] a = {1, 2, 3};

int[] a;      a = new int[] {1, 2, 3};

배열 길이

a.length

배열의 재사용

int[] a = {1, 2, 3};

a = new int[50];  //이때 이전의 배열a의 내용은 버려지며 새로운 메모리 공간이 할당된다.

 

2. 예문

 

        int[]     a = {1, 2, 3};     // int형 배열 선언 및 값 할당

        int       a2[];                   // int형 배열 선언        

        a2 = new int[] {7, 8, 9, 10, 11, 12};  // 배열 생성

        

        System.arraycopy(a, 0, a2, 3, 3);

        System.out.println( a.length );    // 3

        for(int i : a2)  System.out.print( i + " ");   // 7 8 9 1 2 3

        

        String[] as = { "array", "of", "string", };

        String[] as2 = { "another", "array" };

        

        System.out.println("\n" + as.length );    // 3

        Arrays.asList(as).forEach(s -> System.out.println(s));

 

        // as2가 참조하는 것을 as도 참조s, 

        // as2 둘다 같은객체를 참조한다.("another", "array")

        as = as2;  

 

        System.out.println("\n" + as.length );          // 2

        Arrays.asList(as).forEach(System.out::println);  // another array

 

 

3. 배열의배열(다차원배열)

배열은 또 다른 배열을 포함 할 수 있다.

하위 배열은 모두 다른 크기를 가질 수 있다.

 

4ea227992959ec24e2410931e2d522d2_1600430
 

4. 예문

String[][] nara = {

        {"대한민국" , "중국", "필리핀"},

        {"영국", "프랑스"},

        {"가나", "콩고"}

    };

 

    for(String[] sArr : nara) {

      System.out.println("sArr.length : " + sArr.length);

      for(String s : sArr) {

        System.out.print(s + " ");

      }

      System.out.print("\n");

    }

 

sArr.length : 3

대한민국 중국 필리핀 

sArr.length : 2

영국 프랑스 

sArr.length : 2

가나 콩고 

 

 

5. 배열의 예외

NegativeArraySizeException : 음수크기를 갖는 배열 객체를 만들고자 할때 발생

ArrayStoreException : 배열의 자료형과 틀린 자료값을 저장 할려고 하는 경우에 발생

ArrayIndexOutOfBoundsException : 배열의 첨자 범위를 벗어 났을때 발생

NullPointException : null 값을 갖는 배열 객체 참조 변수를 참조하려고 할때 발생

 

6. 배열 정렬

java.util.Arrays 클래스의 sort메소드를 이용하여 정렬가능

 

String[] myArray = { "c", "a", "b" };

// 일단 그냥 출력 해보자. c, a, b 순으로 출력

for (String s : myArray) {

System.out.println(s);

}

// Ascending Sort, 오름차순 정렬   

Arrays.sort(myArray);

// a, b, c로 출력   

for (String s : myArray) {

System.out.println(s);

}

// 이번에는 내림차순(Descending) 졍렬

Arrays.sort(myArray, Collections.reverseOrder());

// c, b, a로 출력

for (String s : myArray) {

System.out.println(s);

}

 

 

#자바배열, #자바Array, #JAVA배열, #함수형인터페이스, #자바, #JAVA, #자바변수, #클래스변수, #인스턴스변수, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바소스 

 

(자바/JAVA/자바동영상/자바교육/자바강의/자바강좌/JAVA교육)JAVA8 forEach, 람다식, 함수형인터페이스

 (자바/JAVA/자바동영상/자바교육/자바강의/자바강좌/JAVA교육)JAVA8 forEach, 람다식, 함수형인터페이스 


https://youtu.be/7TZYJHHXifQ



(자바동영상/자바교육/자바강의/자바강좌)JAVA8 forEach, 람다식, 함수형인터페이스 


자바8

@FunctionalInterface

public interface Consumer<T> {

void accept(T t)

}


void forEach(Consumer<T> action) 


empNames.forEach( (s) -> System.out.println(s) );


자바7 개선된 for문

for (String s : empNames) { 

 System.out.println(s));

   }



자바8 이전까지 Collection등을 순회할 때 Iterator(반복자)를 얻어 순회했지만 자바8 이후부터는  forEach로 가능하다.

forEach로 비즈니스 로직을 분리하여 재사용가능


      String[] myArr = {"오라클","자바"};

    

     List<String> list = (List)Arrays.asList(myArr);

     list.forEach(s -> System.out.println(s));  list.forEach(System.out::println);


[결과]

오라클

자바

------

오라클

자바




[예제]

package javatest;


import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.function.Consumer;


//Consumer implementation that can be reused

class OjcConsumer implements Consumer<String> {

public void accept(String s) {

System.out.println("Consumer impl :: " + s);

}

}


public class ForTest {

public static void main(String[] args) {

String[] myArr = {"오라클자바", "커뮤니티"};

List<String> myList = (List)Arrays.asList(myArr);


// 반복자를 얻어 Collection을 순회

Iterator<String> iter = myList.iterator();

while (iter.hasNext()) {

System.out.println("Iterator String  :: " + iter.next());

}


// 이번에는 forEach문을 이용하자. 

// Consumer는 자바에서 제공하는 추상메소드가 하나 있는 함수형 인터페이스이다.

// 파라미터를 받아서 void형 accept 메소드 구현

myList.forEach(new Consumer<String>() {

public void accept(String s) {

System.out.println("forEach s :: " + s);

}

});


// Consumer 인터페이스를 구현한 클래스를 new후 forEach에 사용

myList.forEach(new OjcConsumer());


// 이번에는 람다식으로...

// 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로

// 람다식을 '익명 함수(anonymous function)'라고 한다.

// forEach안에는 Consumer 인터페이스 타입이 들어와야 하는데

// accept 추상메소드 하나만 있으므로 람다식으로 구현한 아래 괄호안의 메소드는

// accept 추상메소드의 구현체인 익명함수인것이다.

myList.forEach(s -> System.out.println("람다식 :: " + s));


//이번에는 더블콜론 연산자로... 이름만으로 특정메소드 호출

        //타겟 레퍼런스는 :: 앞에 놓고 메소드명은 :: 뒤에 놓습니다.

System.out.println("----- 더블콜론 연산자 ------");

myList.forEach(System.out::println);

}

}



Iterator String  :: 오라클자바

Iterator String  :: 커뮤니티

forEach s :: 오라클자바

forEach s :: 커뮤니티

Consumer impl :: 오라클자바

Consumer impl :: 커뮤니티

람다식 :: 오라클자바

람다식 :: 커뮤니티

----- 더블콜론 연산자 ------

오라클자바

커뮤니티


 #자바forEach, #자바for, #자바람다식, #함수형인터페이스, #자바, #JAVA, #자바변수, #클래스변수, #인스턴스변수, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바소스  

2020년 9월 17일 목요일

(추천자바교육/자바동영상/자바강의/자바강좌)JAVA변수의 종류 클래스변수, 인스턴스변수, 지역변수, 매개변수

 (추천자바교육/자바동영상/자바강의/자바강좌)JAVA변수의 종류  클래스변수, 인스턴스변수, 지역변수, 매개변수 


https://youtu.be/5CyNDCnruy4


(자바교육/자바동영상/자바강의)JAVA변수의 종류  클래스변수, 인스턴스변수, 지역변수, 매개변수 


지역변수(local variables)

매개변수(parameters)

인스턴스 변수(instance fields)

클래스 내에서 선언

클래스 변수(class fields)

클래스 필드, 정적 변수, 정적 필드


1. 클래스 변수

클래스의 인스턴스(객체)가 아니라 그것이 정의된 클래스와  연관되므로 Runtime Data Area의 Method Area에 한 개 존재한다. 

객체를 아무리 많이 생성하더라도 하나만 존재하며 초기화가 한번만 진행된다. (주로 전역변수, 상수로 사용 된다)

생성시기 : 최초 new 하는 경우 또는 Class가 최초로 참조되는 경우

static 한정자는 이 변수(필드, 멤버)가 클래스필드 임을 의미

상수를 정의 하는 것이 클래스 변수의 일반적인 사용이다.

    static final double PI=3.14;

    final static double PI=3.14;

같은 클래스 내부에서는 PI로 지칭되며 클래스 외부에서 해당 변수(필드)를 유일하게 지칭하기 위해서는 클래스명.PI로 인스턴스를 생성하지 않고도 직접 참조가 가능(물론 인스턴스를 만든 후 객체참조변수.PI형태의 참조도 가능하다.)




2. 인스턴스 변수

static으로 선언되지 않은 모든 멤버 변수(필드)는 인스턴스 변수이다.

   public double r;

클래스의 인스턴스인 객체와 관련이 있고 인스턴스(객체)의 현재 상태를 나타내며 생성된 모든 객체는 자신만의 복사본을 힙 메모리에 가진다. 

클래스를 N번 new 했다면 N개의 인스턴스(객체)가 메모리 힙에 존재한다.

클래스 내부에서 이름 하나만으로 지칭된다 

public double r;

    public double area() {

       return PI * r * r;

    }

클래스 외부에서 r을 가리킬 때는 클래스를 인스턴스화 한 객체참조변수명.변수 형태로 사용한다.(반드시 어떤 개체의 인스턴스 변수인지 지정해야 한다.) 인스턴스 변수의 값은 하나의 객체를 다른 객체와 구분한다

    Circle c1 = new Circle();     c1.r=3.0;

    Circle c2 = new Circle();     c2.r=9.0;



3. 로컬 변수

자바에서 메소드 내부에서 정의되어 사용되는 변수를 로컬 변수라고 한다.

다음과 같은 코드를 보자.

class A {

void a() {

boolean b;

System.out.println(b);  //b가 초기화되지 않았다고 오류

}

}

로컬 변수는 자동초기화를 하지 않는다.

- JVM에서 a() 메소드의 스택 프레임에 b라는 변수를 생성해야 하지만  로컬변수는 JVM에서 자동초기화를 하지 않아 b의 초기값이 없기에 b라는 변수는 생성되지 않는다. 이러한 상태에서 b를 사용하려 하면 실행 중에 문제가 생기므로 컴파일 에러를 발생시키는 것이다.





** 멤버변수(클래스,인스턴스변수)의 초기화 

boolean  false

char  ‘\u0000’

Byte : short : int : long  0

Float  0.0f

Double  0.0d

Object type  null



** 클래스 변수, 인스턴스 변수 예제

public class Ojc1_1 {

int kk;          //인스턴스변수

static int kkk;  //클래스변수

public static void main(String[] args) {

int i = Ojc1_1.kkk;


Ojc1_1 o1 = new Ojc1_1();

Ojc1_1 o2 = new Ojc1_1();


System.out.println(o1.kk);

System.out.println(o2.kk);

}

}





 


#자바, #JAVA, #자바변수, #클래스변수, #인스턴스변수, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바컴파일, #자바실행, #자바소스  

(자바기초동영상,자바교육,자바강의,자바강좌)JVM 실행 데이터 영역 (JVM Runtime Data Area), 메소드영역,힙,스택, JAVA강의동영상

 (자바기초동영상,자바교육,자바강의,자바강좌)JVM 실행 데이터 영역 (JVM Runtime Data Area), 메소드영역,힙,스택, JAVA강의동영상


https://youtu.be/MOWjp9UUL54




(자바기초동영상,자바교육)JVM 실행 데이터 영역 (JVM Runtime Data Area), 메소드영역,힙,스택, JAVA강의동영상

 

JVM이 운영되면서 운영체제로 부터 부여 받은 메모리 영역

 

메소드 영역(Method Area) : 모든 쓰레드가 공유하는 영역이며 JVM이 시작될 때 생성된다. 클래스와 인터페이스의 메소드에 대한 바이트코드,  전역변수(클래스 변수), 런타임 상수 풀이 위치한다. 오라클의 Hot Spot VM에서는 Permanent Area, Permanent Generation(PermGen)이라고 부른다. 

 

힙(heap) 영역 : 객체를 저장할 때 사용하는 메모리 영역이며 성능을 생각할 때 가장 많이 고려되는 부분이다.

 

JVM 스택(JVM Stack) 

때 마다 할당되는 스택 프레임(Stack Frame)이라는각 쓰레드 마다 하나씩 존재하고 메소드가 실행될  구조체를 저장한다.

JVM은 오직 JVM 스택에 메소드에 대한 스택 프레임을 추가하고 제거하는 동작만 실행한다. 

자바에서 예외 발생 시 printStackTrace() 등의 메서드로 보여주는 Stack Trace의 각 라인은 하나의 스택 프레임을 표현한다.

실행되는 메소드의 스택 프레임을 가지는데 각 스택 프레임에는  지역변수, 메소드의 인자, 메소드의 리턴값, 리턴 번지 등이 저장되고 스택 프레임은 메소드가 끝나면 사라진다.

 

PC 레지스터(Program Counter Register)

쓰레드가 시작될 때 생성되며 쓰레드 마다 하나씩 존재하여 실행 할 JVM의 명령어의 주소를 가리킨다.

실행 상수 풀(Runtime Constant Pool) : 메소드 영역으로 부터 할당 받으며 클래스와 인터페이스의 상수, 메서드, 필드에 대한 모든 레퍼런스를 저장하는 영역이다. 자바 프로그램에서 어떤 메서드나 필드를 참조할 때 JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리상 주소를 찾아서 참조하게 된다.

네이티브 메소드 스택(Native Mathod Stack) : 자바이외의 언어로 작성된 네이티브 코드를 위한 스택, JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택이다.

 

메소드 내에서 객체 참조 형으로 선언된 변수인 경우 지역변수로서 스택에 위치하며 힙에 저장되어 있는 객체에 대한 참조 값을 가지게 된다. 

객체 참조 형 변수의 값이 null 이라는 의미는 아무것도 참조하고 있지 않다는 의미이다.

new 연산자는 힙(heap) 메모리에 객체를 만들고 그 객체의 참조값을 반환한다. 

객체 참조 변수의 경우 대입, 메소드 호출시의 인자, 반환형 등으로 사용 될 때 참조 값만 전달 될 뿐, 객체 자체가 복제되어 전달되는 것은 아니다.

 

48e376921c9604c2801d6407edebc9b6_1600377
48e376921c9604c2801d6407edebc9b6_1600377
48e376921c9604c2801d6407edebc9b6_1600377
 

#자바, #자바메모리, #JVM메모리, #자바힙, #메소드영역, #자바객체란, #객체란,  #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바컴파일, #자바실행, #자바소스  

(자바교육/자바동영상)JAVA에서 클래스패스란?(classpath), 부트스트랩 클래스로더, 확장클래스, 환경변수클래스정의

 (자바교육/자바동영상)JAVA에서 클래스패스란?(classpath), 부트스트랩 클래스로더, 확장클래스, 환경변수클래스정의


youtu.be/ZlrsnSlTdQs


클래스패스는 클래스를 찾는 경로이다.

클래스패스(classpath) 설정 방법

classpath는 sdk tool(java, javac)등에서  –classpath option을 줘서 클래스를 찾을 경로를 지정할 수 있다.

또는 OS에서 환경설정을 함으로서 지정 가능하다. (set classpath=~ 형태 또는 내컴퓨터고급환경변수에서 classpath  지정)

현재 디렉토리에 있는 모든 사용자 클래스 파일들을 지칭할때는 .(dot)을 사용한다.

Java Launcher의 클래스 찾기(클래스 검색 방식)

우선 부트스트랩 클래스에서 기본 자바 플랫폼에 있는 API 클래스들을 찾아 메모리에 로딩하며 여기에서 찾지 못할 경우 확장 클래스에서 찾고 여기서도 찾지 못한다면 사용자가 정의한 클래스패스에서 클래스를 찾아 메모리에 로딩한다.(없다면 ClassNotFound 오류발생!)

Bootstrap classes(부트스트랩 클래스) 찾기

- 자바 플랫폼을 구성하는 클래스들이며 rt.jar(Object.class, String.class)에 포함되어 있는 클래스 이다.

- jar 압축 파일들은 bootstrap class path에 의해 sun.boot.class.path 시스템 프로퍼티에 저장된다.


Java Launcher의 클래스 찾기(클래스 검색 방식)

extension classes(확장 클래스) 찾기

- 자바 플랫폼을 확장한 클래스들 이다.

- jre/lib/ext 확장 디렉토리에서 모든 jar 파일들을 자바2 확장 클래스로 가정한다.

user classes(사용자 클래스) 찾기

    - 사용자가 환경 변수에서 지정한 경로에서 클래스를 찾는다.

- -cp 또는 –classpath 명령행 옵션은 기본 환경 설정과 클래스 패스 환경변수 설정을 재정의 한다.


주의 : 환경변수에서 클래스패스(classpath)를 별도로 지정하지 않았다면 현재 디렉토리에 있는 클래스는 찾는다. 하지만 c:\classes등으로 지정했다면 기본적으로 현재 디렉토리에 참조할 클래스가 있어도 찾지 못한다. 별도로 클래스패스를 지정하는 경우에는 반드시 쩜(.)도 포함을 해야한다.




#자바, #클래스패스, #classpath, #클래스패스란, #부트스트랩클래스로더, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바컴파일, #자바실행, #자바소스 

2020년 9월 16일 수요일

(JAVA동영상강좌)자바프로그램 실행과정, 자바인터프리터, Java, javac 명령 실습 ,자바동영상강의

 

(JAVA동영상강좌)자바프로그램 실행과정, 자바인터프리터, Java, javac 명령 실습 ,자바동영상강의 





 

 

package javatest;

 

public class Hello {

   public static void main(String[] args) {

      System.out.println("Hello World!");

   }

}

 

1.이클립스에서 javatest 라는 java project 생성
2.javatest 패키지에 Hello.java 생성

 

Eclipse workspace : c:\dev\workspace

Project 경로 c:\dev\workspace\javatest

 

소스경로 c:\dev\workspace\javatest\src

클래스파일경로 c:\dev\workspace\javatest\bin

 

 

 

#자바, #자바동영상, #자바동영상강의, #자바강의, #자바강좌, #JAVA, #JAVA동영상, #JAVA강의, #JAVA강좌, #자바교육, #JAVA교육, #자바인터프리터, #자바Interpreter, #자바컴파일, #자바실행


(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...