'자바'에 해당되는 글 17건

  1. 2018.09.09 자바 foreach문 사용법
  2. 2018.09.08 C++ 자바 상속 비교
  3. 2018.09.06 자바 배열 사용법
  4. 2018.09.05 자바 유료화에 대해
  5. 2018.08.20 자바 String 문자열 사용법 정리 1

자바 foreach문 사용법



foreach(For-each)문은 for, while, do-while 반복문과 같은 배열 탐색 기법입니다.


사용방법은 다음과 같습니다.


☞ 일반적인 for 반복문과 동일하게 for 키워드를 사용합니다.

☞ 반복문 내에 카운터 변수를 선언하고 콜론(:) 다음 배열이름을 순서대로 선언합니다.

☞ 일반적으로 배열이나 Collection 클래스(ArrayList ... 등)를 반복하는 데 사용됩니다.


※ 구문(Syntax)

일반적으로 배열을 탐색할 때 다음과 같이 for 반복문을 사용합니다.

int[] arr = {0, 1, 2, 3, 4};

for (int i = 0; i < 5; i++) { 

System.out.println(arr[i]); // 0 1 2 3 4 출력

}


위 반복문을 foreach 반복문으로 다음과 같이 표현할 수 있습니다.

int[] arr = {0, 1, 2, 3, 4};


for (int i : arr) { 

System.out.println(arr[i]); // 0 1 2 3 4 출력

}


이러한 foreach 반복문을 사용함으로써 가변하는 복잡한 배열이나 리스트의 크기를 일일이 구할 필요가 없습니다. 이중 for문이나 복잡한 반복문에 적합하며, 인덱스를 생성해 접근하는 단순 for문 보다 수행속도가 조금 더 빠릅니다.

무엇보다도 코드가 짧아서 좋습니다 ㅎㅎ(가독성도 높구요)


이러한 사용하기도 편하고 성능 빵빵한 foreach문에게도 한계점이 존재하는데요...


※ foreach 문의 한계

배열 및 리스트를 탐색하는 반복문을 구현하기 편한 foreach 반복문에게도 한계가 존재합니다.


⊙ 반복문 내에서 배열이나 리스트의 값을 변경 하거나 추가할 수 없습니다.

for(int i : arr) {

arr[i] = 3; // 오류 발생!!, i가 무엇?

arr[i+1] = 4; // 오류 발생!! i가 대체 무엇???

}


⊙ 배열을 역순으로 탐색할 수 없습니다.

for(int i : arr) { // 표현 조차 불가능 ㅜㅜ

...

}


이러한 장, 단점을 가진 foreach문을 적절히 사용하여 가독성 높고 성능 좋은 프로그래밍을 하시기 바랍니다. 혹시 오타가 있는 부분이나 궁금한 점이 있는분은 댓글로 남겨주시기 바랍니다. 

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.


C++ 자바 상속 비교



상속의 목적은 C++과 자바 모두 동일합니다.

우리가 상속을 받는 목적은 코드를 재사용하거나 is-a 관계를 생성하기 위함입니다.

그렇다면 이 두 객체지향언어(Object-Oriented Laguage)의 상속의 차이점에 대해 비교해보겠습니다.


◎ 자바에서 모든 클래스(Class)는 직접 또는 간접적으로 Object Class에서 상속받습니다. 자바에서 상속받지 않는 클래스를 작성하면 기본적으로 Object 클래스에서 자동으로 상속됩니다. 


◎ 자바에서는 부모의 부모(조부모; GrandParent) 클래스에 직접 접근할 수 없습니다.(not directly accessible, c++에서는 :: 연산자를 사용하여 접근 가능합니다.) 부모의 부모 클래스에 접근하기 위해서는 부모 클래스를 통해 접근할 수 있습니다. 


예)

class GrandParent {

public void Print() {

System.out.println("GrandParent");

}

}


class Parent extends GrandParent {

public void Print() {

System.out.println("Parent");

}

}


class Child extends Parent {

super.super.Print(); // 에러 발생!!

public void Print() {

System.out.println("parent");    

}

}


class Main {

public static void main(String args[]) {

Child c = new Chid();

c.Print();

}

}


위 코드는 super.super.Print() 줄에서 오류가 발생합니다. 아래 코드처럼 수정할 수 있습니다.


class GrandParent {

public void Print() {

System.out.println("GrandParent");

}

}


class Parent extends GrandParent {

super.Print();

public void Print() {

System.out.println("Parent");

}

}


class Child extends Parent {

super.Print(); // 부모 클래스를 통해 접근 가능!

public void Print() {

System.out.println("parent");

}

}


class Main {

public static void main(String[] args) {

Child c = new Chid();

c.Print();

}

}


◎ 상속받지 않은 다른 클래스에서 protected 멤버에 접근할 수 있습니다.(클래스가 같은 패키지에 존재 해야합니다.)


예)

class A {

protected int x = 10;

}

class B {

public static void main(String[] args) {

A a = new A();

System.out.println(a.x); // 접근 가능!!

}

}


◎ 자바에서 상속은 extends 키워드를 사용합니다. C++과 달리 public, protected, private과 같은 지정자를 제공하지 않습니다. 


◎ 자바에서 메소드는 기본적으로 가상(Virtual) 메소드입니다. C++에서는 virtual 키워드를 명시적으로 사용해야 합니다.


예)

class A {

public void Print() {

System.out.println("A");

}

}


class B extends A {

public void Print() {

System.out.println("B");

}

}


class Main {

public static void main(String[] args) {

A a = new B();

b.show(); // B가 출력!!

}

}


◎ 자바는 추상클래스(abstract)와 인터페이스(interface)를 구분된 키워드로 사용합니다.


◎ 자바는 다중 상속(둘 이상의 클래스에서 상속)을 지원하지 않습니다. C++은 지원합니다.




코드는 직접 작성했기 때문에 오타 때문에 정상적으로 작동하지 않을 수 있습니다.

해당 게시글에 대한 궁금한점 있으시면 댓글로 달아주시면 답변 해 드리겠습니다.

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.

'C, C++' 카테고리의 다른 글

C/C++ 구조체 사용법 및 예제  (1) 2018.10.08
C/C++ 배열 사용법  (0) 2018.10.05
C 파일처리  (0) 2018.10.02
C++ 벡터 사용법  (2) 2018.09.26
C언어 포인터  (8) 2018.09.25
C 랜덤 - 난수 생성하기  (7) 2018.09.06
C++ String 문자열 사용법 정리  (0) 2018.08.20
[C++] C# 연동하기 / C# dll 파일 만들기  (1) 2018.08.18

자바 배열 사용법



배열이란 같은 데이터 타입을 가진 연속된 메모리 공간으로 이루어진 자료 구조입니다. 같은 데이터 타입을 가진 여러개의 변수를 할당하기위해 사용합니다.


자바에서 배열 사용하는 방법입니다.


1. 1차원 int형 배열

C/C++과 달리 자바는 모든 변수가 객체(Object)로 이루어져있기 때문에 배열을 사용하기 위해 배열 객체에 new를 통해 메모리 공간을 할당해줍니다.

다음은 1차원 int형 배열의 사용방법입니다.


소스코드(Java) - 1차원 int형 배열 선언

int arr[];

arr = new int[10]; // int arr[] = new int[10] 과 같음

// int arr[] = {1, 2, 3, 4} 도 가능


for(int i = 0; i < 10; i++) {

arr[i] = i+1;

}


System.out.print("arr = [ ");

for(int i = 0; i < 10; i++) {

System.out.print(arr[i]);

System.out.print(" ");

}

System.out.println("]");

실행결과


2. 1차원 String형 배열

int와 마찬가지로 String 배열 역시 똑같은 방법으로 선언하고 사용하시면 됩니다.

소스코드(Java) - 1차원 String형 배열 선언

String[] str = new String[10];


for(int i = 0; i<10; i++) {

str[i] = "str" + (i+1);

}


for(int i =0; i < 10;i ++) {

System.out.print(str[i] + " ");

}

실행결과


3. 1차원 int형 배열의 다른 선언방법

C/C++ 등의 언어에서는 배열을 선언과 동시에 크기를 지정해주어야 하지만 자바와 같은 언어의 경우 배열 객체의 선언과 정의를 따로함으로써 배열의 크기를 받아 지정해 줄 수 있습니다.(C/C++의 포인터 동적할당 처럼 사용)

소스코드(Java) - 1차원 int형 배열 선언2

int arr[];

int arr_size = 8;

arr = new int[arr_size];

for(int i = 0; i < arr_size; i++) {

arr[i] = i+1;

}


for(int i = 0; i < arr_size; i++) {

System.out.println(arr[i]);

}

실행결과


4. 2차원 int형 배열

1차원과 마찬가지로 new를 통해 선언할 수 있습니다.

소스코드(Java) - 2차원 int형 배열 선언

int matrix[][] = new int[5][5]; // 다음과 같이 초기화 할 수 있습니다.


for(int i = 0; i < 5; i++) {

for(int j = 0; j < 5; j++) {

matrix[i][j] = (j+1)+(i*5);

}

}


for(int i = 0; i < 5; i++) {

for(int j = 0; j < 5; j++) {

System.out.print(matrix[i][j] + " ");

}

System.out.println();

}

실행결과


5. 배열 복사

System.arraycopy 메소드를 통해 같은 데이터 타입의 배열끼리 배열을 복사 할 수 있습니다.

소스코드(Java) - 1차원 String형 배열 복사

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

String[] str2 = new String[3];


System.arraycopy(str1, 0, str2, 0, 3); // 복사할 배열, 복사할 배열의 시작위치, 복사받을 배열, 복사받을 배열의 시작위치, 배열크기


for(int i = 0; i < 3; i++) {

System.out.println(str2[i]);

}

실행결과


6. 배열 정렬

Array클래스의 sort메소드를 통해 배열을 오름차순 또는 내림차순, 인덱스를 지정해서 배열의 요소를 정렬할 수 있습니다. (시간복잡도는 O(n logn))

소스코드(Java) - 1차원 int형 배열 정렬

int arr[] = {4, 2, 3, 1, 0}; // 배열의 선언과 동시에 초기화(크기는 알아서 지정)


Arrays.sort(arr, 0, 5); // 배열, 정렬을 수행 할 시작위치, 끝위치


for(int i = 0; i < 5; i++) {

System.out.println(arr[i]);

}

실행결과


이상입니다.




정보가 유익하셨다면 아래 공감버튼 눌러주시면 감사하겠습니다.

질문사항은 댓글로 달아주시면 성의껏 답변해드리겠습니다.





Oracle의 Java 1.8의 유료화 정책이 공개됬습니다. 

2019년 부터 Oracle에서 배포하는 Java 1.8 SDK 및 JRE 모든 공개용 패키지를 이용하여 상업 목적의 개발 및 사용에 대한 유료화 정책입니다.


♠ Java의 저작권에 대해

2006년 Sun이 Java를 공식 오픈소스화 했습니다. 현재는 Oracle이 Sun을 인수하였으며 최근에 Java EE까지 오픈소스화 할 계획을 발표했습니다.


♠ Oracle JDK의 대체

https://en.wikipedia.org/wiki/List_of_Java_virtual_machines

해당 사이트를 참조하여 적절한 제품을 찾으시길 바랍니다.

또한 Oracle JDK가 아닌 OpenJDK의 사용을 권해드립니다.


♠ Oracle JDK를 지속적으로 사용하실 분은 다음과 같은 가격을 지불해야 합니다.

=> SE Subscription (Server) :  # core * core factor (oracle core factor table) * # server * 25$/month * 12 months

=> SE Subscription (Desktop) :  # of desktops * 2.50$/month 

또한 여기에서 US Oracle Technology Commercial Price List를 확인 할 수 있습니다.


자바 유료화에 대한 더 자세한 정보는 여기서 확인하세요.




질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.







안녕하세요 열코입니다.

이번 시간에는 자바에서 String(문자열) 사용법에 대해 알아보겠습니다.

자바에서 문자열 사용 시 자바에서 제공하는 String class를 참조합니다.



※ 선언 및 정의

⇒ 문자열을 사용하기 위해 String 객체를 선언하고 정의합니다.

선언 및 정의 방법은 여러 가지가 있으나 아래 예는 주로 사용되는 방법입니다.


사용법 1)


1
2
3
String str1;
 
str1 = "str1";
cs


사용법 2)


1
String str2 = "str2";
cs


사용법 3)


1
String str3 = new String("str3");
cs


사용법 4)


1
2
3
String str4 = new String();
 
str4 = "str4";
cs



※ length : 문자열의 길이

⇒ 해당 객체의 문자열 길이를 반환(int형) 합니다. (null은 포함하지 않음)


1
2
3
String str = "abcde";
 
System.out.println(str.length());  // 5 출력
cs




※ isEmpty : 문자열이 비어있는지 확인

⇒ 문자열의 길이(length)가 0이면 true 반환(boolean형), 0이 아니면 false를 반환합니다.


1
2
3
4
5
6
7
8
9
String str = new String();
 
if(str.isEmpty())  // "empty" 출력
 
     System.out.println("empty");
 
else
 
     System.out.println("not empty");
cs



※ charAt : 문자 반환

⇒ 문자열 중 해당 인덱스의 문자(char형)를 반환합니다.(인덱스는 0 ~ 문자열의 길이(length) -1)


1
2
3
String str = new String("abcd");
 
System.out.println(str.charAt(2));  // 'c' 출력
cs



※ getChars : 문자 배열 복사

⇒ 문자열을 문자(char) 배열로 복사합니다.


1
2
3
4
5
6
7
String str = new String("abcd");
 
char [] ch = new char[4];
 
str.getChars(02, ch, 0); // 시작 인덱스, 끝 인덱스, 복사 받을 char 배열 이름, 복사 시작 위치
 
System.out.println(ch);  // "ab" 출력
cs



※ equals : 문자열 비교

⇒ 해당 문자열과 매개변수의 문자열이 같은 지 비교하여 true 또는 false를 반환합니다.(boolean형)


1
2
3
4
5
6
7
8
9
10
11
String str = new String("abcd");
 
String str2 = new String("abc");
 
if(str.equals(str2))  // "not equal" 출력
 
     System.out.println("equal");
 
else
 
     System.out.println("not equal");
cs


(자바에서 문자열 비교를 ==연산자로 비교할 수 없습니다!)



※ compareTo : 문자열 비교(사전 순으로 대소 비교)

⇒ 해당 문자열과 매개변수의 문자열을 사전 순으로 비교합니다.


1
2
3
4
5
String str = new String("aaa");
 
String str2 = new String("bbb");
 
System.out.println(str.compareTo(str2)); // -1 출력
cs


반환값 : 

str과 str2의 같을 경우 : 0

str이 str2보다 사전 순으로 앞인 경우 : -1

str이 str2보다 사전 순으로 뒤인 경우 : 1

* str의 마지막 문자열과 str2의 마지막 문자를 제외하고 같은 경우

예 ) String str = new String("ccca");

       String str2 = new String("cccz");

       str과 str2의 마지막 문자열을 비교하여 사전 순 차이만큼 반환 : -25



※ indexOf : 문자열 위치

⇒ 해당 문자열이 위치하는 인덱스를 반환합니다.(int형)


1
2
3
String str = new String("abcd");
 
System.out.println(str.indexOf("c")); // 2 출력
cs


(해당 문자열이 존재하지 않으면 -1을 반환합니다.)



※ lastIndexOf : 문자열 마지막 위치

⇒ 해당 문자열이 마지막으로 위치하는 인덱스를 반환합니다.(int형)


1
2
3
String str = new String("abcdeabcda");
 
System.out.println(str.lastIndexOf("c")); // 7 출력
cs



※ subString : 문자열 자르기

⇒ 해당 문자열의 인덱스만큼 잘라서 반환합니다.(String형)


1
2
3
4
5
String str = new String("abcdefg");
 
System.out.println(str.substring(26)); // "cdef" 출력
 
System.out.println(str.substring(5)); // "fg" 출력
cs


(매개 변수가 2개인 경우 : 해당 범위만큼 자름, 1개인 경우 : 앞에서부터 인덱스만큼 자름)



※ concat : 문자열 합치기

⇒ 해당 문자열 뒤에 매개변수 문자열을 서로 합칩니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String str = new String("a");
 
String str2 = new String("b");
 
String str3 = new String();
 
 
 
str3 = str.concat(str2);
 
String str4 = str+str2; // concat과 같은 동작
 
 
 
System.out.println(str3); // "ab" 출력
 
System.out.println(str4); // "ab" 출력
cs



※ replace : 문자열 치환 

⇒ 해당 문자를 찾아 다음 문자로 변경합니다.


1
2
3
4
5
String str = new String("abc");
 
str = str.replace('b''k');
 
System.out.println(str); // "akc" 출력
cs



※ contains : 문자열 포함

⇒ 해당 문자열이 포함되어 있는지 확인합니다. 포함할 경우 true, 아닌 경우 false 반환(boolean형)


1
2
3
4
5
6
7
8
9
String str = new String("abc");
 
if(str.contains("bc")) // "contain" 출력
 
     System.out.println("contain");
 
else
 
     System.out.println("not contain");
cs



※ split : 문자열 분리

⇒ 문자열을 해당 문자열을 기준으로 모두 분리합니다.(String [] 반환)


1
2
3
4
5
6
7
8
9
10
11
String str = new String("a b c d e f");
 
String[] str2 = new String[6];
 
for(int i = 0; i < 6; i++
 
     str2[i] = str.split(" ")[i]; 
 
for(int i = 0; i < 6; i++
 
     System.out.print(str2[i]); // abcdef 출력
cs



※ trim : 문자열 공백 제거

⇒ 해당 문자열의 앞, 뒤의 공백을 모두 제거합니다.(문자열 사이의 공백은 제거되지 않음)


1
2
3
4
5
String str = new String(" a b c ");
 
String str2 = str.trim();
 
System.out.println(str2); // "abc" 출력
cs



아래 두 메소드는 Integer class의 메소드입니다. 

자바에서 주로 사용하는 int to String, String to int 변환 방법입니다.


※ toString : int to String

⇒ int형 변수를 String 객체로 변환


1
2
3
4
5
6
7
String str = new String("100");
 
int value = 200;
 
String sum = str + Integer.toString(value);
 
System.out.println(sum); // 100200 출력
cs



※ parseInt : String to int 

⇒ String 객체를 int형 변수로 변환


1
2
3
4
5
6
7
String str = new String("100");
 
int value = 200;
 
int sum = Integer.parseInt(str) + value;
 
System.out.println(sum); // 300 출력
cs




이상 '자바 문자열 사용법'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





to Top