Python 과 C++를 이미 배운 입장에서 정리해봤습니다.

 

Hello world !

public class Main {
	public static void main(String[] args){
		System.out.println("Hello World!");
	}
}

시작부터 일단 뭐가 엄청 길다

파이썬은 print("Hello World!") 가 끝이었는데

 

1. 자료형

원시(Primitive) 자료형

JAVA는 Python과 C++ 의 특징을 둘 다 가지고 있다.

포인터가 존재하지 않고 메모리 관리를 직접 하지 않아도 되는 점은 Python과 같지만

변수나 함수의 반환 자료형을 선언할때 지정해줘야 하는 점은 C++과 같다.

public class Sample {
	int a = 1;
	char = 't';
	float c = 3.0;
	double d = 4.0;
	boolean e = true;
    
	int[] array = {1,2,3,4,5};
}

그러나 C++과 약간의 차이점이 있다.

bool -> boolean

Wrapper class의 존재

 

그 외의 대부분은 C++과 매우 유사하며

문자열 포맷팅 또한 C++ 처럼 %d, %c, %f 개행문자를 사용한다.

단 String.format()또는 System.out.printf()를 사용해야한다.

 

배열 선언 또안 C와 동일하게 []를 통해 선언한다.

 

String

public class Main {
    public static void main(String[] args){
        String myString1 = "hello world";
        String myString2 = "hello";
    
        System.out.println(myString1.equals(myString2)); // return false
        System.out.println(myString1.indexOf('h')); // return 0
        System.out.println(myString1.contains(myString2)); // return true
        System.out.println(myString1.charAt(0)); // return 'h'
        System.out.println(myString1.replaceAll("world","java")); // return hello java
        System.out.println(myString1.substring(0,4)); // return hello
        System.out.println(myString1.equals(myString2)); // false
    }
}

C++의 string이 JAVA에서도 String 으로 제공된다.

다만 따로 import(include) 하지 않다고 사용할 수 있다.

 

List

import java.util.ArrayList;

public class Main {
    public static void main(String[] args){
        ArrayList myArray = new ArrayList();
        myArray.add("123");
        myArray.add("456");
        
        System.out.println(myArray.get(0)); // "123"
        System.out.println(myArray.get(1)); // "456"
    }
}

 

list는 주로 ArrayList를 이용한다.

C++과는 다르게 add,get 메소드를 이용해 정보를 입력하고 조회한다.

import java.util.Comparator;
import java.util.Arrays;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args){
        String [] myArray1 = {"123", "456"};
        ArrayList <String> myArray2 = new ArrayList <> (Arrays.asList(myArray1));
        
        System.out.println(myArray2.get(0)); // "123"
        System.out.println(myArray2.get(1)); // "456"
        
        System.out.println(myArray2.size()); // "2
        System.out.println(String.join("", myArray2)); // "123456"
        
        myArray2.sort(Comparator.naturalOrder());
        System.out.println(myArray2); // ["123","456"]
        
        myArray2.sort(Comparator.reverseOrder());
        System.out.println(myArray2); // ["456", "123"]
    }
}

또 <> 제네릭스(Generics) 를 이용해 리스트에 들어갈 자료형을 선언해 줄 수 있다.

size() join() sort() 등의 함수도 사용할 수 있으나 사용법은 C++과 조금씩 차이가 있다.

Map

import java.util.HashMap;

public class Main {
    public static void main(String[] args){
        HashMap <String,String> myMap = new HashMap <> ();
        
        myMap.put("key1","value1");
        myMap.put("key2","value2");
        System.out.println(myMap.get("key1")); // "value1"
        System.out.println(myMap.containsKey("key2")); // true
        System.out.println(myMap.keySet()); //[key1,key2]
        System.out.println(myMap.remove("key2")); //value2
        System.out.println(myMap.size()); // 1
    }
}

HashMap을 통해 Map을 구현 가능하다.

C++ 의 map과 거의 동일하다.

put,get,remove를 통해 삽입,조회,삭제를 할 수 있다.

containsKey를 통해 키 유무를 확인할 수 있고 size를 통해 크기를 알 수 있다.

Set

package project;

import java.util.HashSet;
import java.util.Arrays;

public class Main {
    public static void main(String[] args){
        HashSet <String> mySet1 = new HashSet <> (Arrays.asList("1","2","3"));
        HashSet <String> mySet2 = new HashSet <> (Arrays.asList("3","4","5"));
        
        System.out.println(mySet1); // [1,2,3]
        
        mySet1.retainAll(mySet2); // 교집합
        System.out.println(mySet1); // [3]
        
        mySet1.addAll(mySet2); // 합집합
        System.out.println(mySet1); // [3,4,5]
        
        mySet1.removeAll(mySet2); // 여집합
        System.out.println(mySet1); // []
    }
}

HashSet를 통해 Set를 구현이 가능하다.

retailAll,addAll,removeAll을 통해 교집합,합집합,여집합 연산을 수행할 수 있다.

제어문 (if , if else, else, for, while, switch 등등)

제어문 구조는 c와 그냥 일치한다.

c 문법대로 그대로 사용하면 될 듯 하다.

 

2. Class

생성

package project;

class Animal {
    int legs = 4;
}
class Cat extends Animal {
    int getLegs(){
        return this.legs;
    }
}
class Dog extends Animal {
    String name;
    Dog(String name){
        this.name = name;
    }
    int getLegs(){
        return this.legs;
    }
    String getName(){
        return this.name;
    }
}

public class Main {
    public static void main(String[] args){
        Dog dog = new Dog("puppy"); // 클래스 생성
        Animal cat = new Cat(); // 업캐스팅
        //Dog animal = new Animal(); // 에러! 다운캐스팅은 불가능!!
        // System.out.println(cat.getLegs()); //에러!
        System.out.println(dog.getLegs()); // 4
        System.out.println(dog.getName()); // puppy
    }
}

객체 생성 방법은 C++에서 new를 이용해 동적으로 객체를 생성하는 방법과 동일하다.

상속 키워드는 extends 이며 C++과 다르게 다중 상속은 지원하지 않는다.

메소드 오버라이딩 오버로딩 모두 가능하며 업캐스팅 생성은 가능하지만 다운캐스팅은 불가능하다.

생성자는 C++과 동일하게 반환값 없이 클래스 이름을 그대로 사용한다.

Interface

C++에선 제공하지 않는 기능이다.

특정 기능을 구현할 것을 약속하는 추상 형식이다.

다형성 형성에 도움을 주며 다중상속도 가능하다.

 

https://wikidocs.net/217

 

05-07 인터페이스

인터페이스(Interface)는 초보 개발자를 괴롭히는 단골손님이다. 인터페이스에 대한 개념없이 코드로만 이해하려고 하면 곧 미궁에 빠지게 된다. 이렇게 이해하기 힘든 인터페이스…

wikidocs.net

추상(abstract) 클래스

C++의 virtual 클래스의 역할을 한다.

interface와 Class의 역할을 모두 할 수 있다.

 

제대로 공부하려면 연습문제나 간단한 프로젝트를 해보는 게 좋을 것 같다.

그건 다음편에 올려야겠다.

+ Recent posts